numpy Python as_strided方法是如何工作的?

vaj7vani  于 2024-01-08  发布在  Python
关注(0)|答案(2)|浏览(201)

我试图在我的一个作业中做一些异常检测,我试图创建滑动窗口,但我想让它们使一个窗口不与另一个重叠。例如数组= [1,2,3,4,5,6]我想得到这个结果结果= [[1,2,3],[4,5,6],6]]显然你可以使用as_strided或sliding_window_view方法,但第二个方法效果不太好,但如果有人知道解决方案,那就非常感谢了

bq3bfh9z

bq3bfh9z1#

你的一维数组:

  1. In [234]: x=np.arange(1,7)

字符串
一个简单的重塑:

  1. In [235]: x.reshape(-1,3)
  2. Out[235]:
  3. array([[1, 2, 3],
  4. [4, 5, 6]])


滑动窗口创建(3,)个窗口,完全重叠

  1. In [236]: np.lib.stride_tricks.sliding_window_view(x,3)
  2. Out[236]:
  3. array([[1, 2, 3],
  4. [2, 3, 4],
  5. [3, 4, 5],
  6. [4, 5, 6]])


从那里我们可以很容易地切出不重叠的元素:

  1. In [237]: np.lib.stride_tricks.sliding_window_view(x,3)[::3]
  2. Out[237]:
  3. array([[1, 2, 3],
  4. [4, 5, 6]])


要使用as_strided,我们必须理解stridessliding_windows为我们做了这样的思考:

  1. In [238]: x.strides
  2. Out[238]: (4,)
  3. In [239]: np.lib.stride_tricks.as_strided(x,shape=(2,3),strides=(12,4))
  4. Out[239]:
  5. array([[1, 2, 3],
  6. [4, 5, 6]])


12(3*4)
sliding_windows的作用:

  1. In [240]: np.lib.stride_tricks.as_strided(x,shape=(4,3),strides=(4,4))
  2. Out[240]:
  3. array([[1, 2, 3],
  4. [2, 3, 4],
  5. [3, 4, 5],
  6. [4, 5, 6]])


sliding_windows更容易使用,因为我们不需要知道步幅,它可以确保结果是正确的大小。

展开查看全部
l7mqbcuq

l7mqbcuq2#

  1. import numpy as np
  2. # Your initial array
  3. array = np.array([1, 2, 3, 4, 5, 6])
  4. # Reshape the array into a 2D array where each sub-array is a window
  5. # This only works if the length of the array is divisible by the window size
  6. result = array.reshape(-1, 2)
  7. print(result)

字符串

相关问题