Python 使用numpy步幅技巧在两个不同大小的移动窗口上操作

Python 使用numpy步幅技巧在两个不同大小的移动窗口上操作,python,arrays,numpy,Python,Arrays,Numpy,我正在处理一维数据数组。我在7项窗口中寻找大于预期的差异,但需要在更大的20项窗口中更正值 我正在使用python和NumPy来完成这项任务。我开始使用numpy stride_技巧在原始数组中创建一个移动窗口。在较小的窗口中,步步技巧似乎是计算出更高方差的最快方法。尝试展开窗口以更正数据时,我被卡住了 以下是我当前的代码: with open('Sather-line-352-original.txt') as f: array = np.array(map(int, f)) # sh

我正在处理一维数据数组。我在7项窗口中寻找大于预期的差异,但需要在更大的20项窗口中更正值

我正在使用python和NumPy来完成这项任务。我开始使用numpy stride_技巧在原始数组中创建一个移动窗口。在较小的窗口中,步步技巧似乎是计算出更高方差的最快方法。尝试展开窗口以更正数据时,我被卡住了

以下是我当前的代码:

with open('Sather-line-352-original.txt') as f:
   array = np.array(map(int, f))

# shape defines the dimensions of the new temp array.
# strides define memory-based coordinates of original array items.
def pystride(array,frame_length,strided_items):
   num_frames = 1 + ((len(array) - frame_length)/ strided_items)
   row_stride = array.itemsize * strided_items
   col_stride = array.itemsize

   a_strided = np.lib.stride_tricks.as_strided(
      array,
      shape=(num_frames, frame_length),
      strides=(row_stride, col_stride)
   )
   return a_strided

def find_max_min(array):
   max_diff = 120

   for sub in pystride(array,frame_length=7,strided_items=2):
      max_val = max(sub)
      min_val = min(sub)
      if abs(max_val - min_val) >= max_diff:
         # assign 'pointers' in original array indicating where large diffs are found.
         sub[0] = int('{:<05}'.format(sub[0]))

find_max_min(array)
以open('Sather-line-352-original.txt')作为f的
:
array=np.array(map(int,f))
#形状定义新临时数组的尺寸。
#跨步定义原始数组项的基于内存的坐标。
def pystride(数组、帧长度、跨步项):
num_frames=1+((len(数组)-帧长度)/跨步项)
行步幅=array.itemsize*步幅项目
col_stride=array.itemsize
a_stread=np.lib.stread(
阵列,
形状=(帧数,帧长度),
步幅=(行步幅、列步幅)
)
大步返回
def查找最大值最小值(阵列):
最大差值=120
对于pystride中的子项(数组,帧长度=7,跨步项=2):
最大值=最大值(分)
最小值=最小值(sub)
如果abs(最大值-最小值)>=最大差值:
#在原始数组中指定“指针”,指示找到大差异的位置。

sub[0]=int({:你能提供你到目前为止所写的代码吗?
stride\u技巧
如果你没有正确的形状,并且开始访问数据缓冲区之外的值,那么可能会很危险。不要试图捏造它,我假设你使用的是
np.lib.stride\u技巧
,其中形状被选择为不从末端脱落。如果您可以对其执行整个数组操作,则生成的2d数组将非常有用,例如,
mean
sum
按轴。但是很难理解您还想做什么。但是一旦您开始在窗口上进行迭代以进行特殊测试,您就会失去大部分的功能
strided
speed advantage。我已经更新了原始帖子以添加当前代码。如果不使用stride_技巧,您会索引数组还是添加迭代器?