【问题标题】:numpy array slicing, without for loopnumpy 数组切片,没有 for 循环
【发布时间】:2018-04-26 19:47:28
【问题描述】:

我有一个问题,如何从 numpy 数组生成切片数组。我可以用for循环来做,我想做的是:

def calc_matrix(arr, k): 
    x = np.zeros((len(arr) - k + 1, k))
    for i in range(len(arr) - k + 1):
        x[i, :] = arr[i: (i+k)]
    return x

【问题讨论】:

  • 为清楚起见,您能否提供arrk 的示例?
  • 另外,您能否澄清一下您想要摆脱 for 循环的技术原因是什么?
  • 避免 for 循环并使用对许多数组元素起作用的操作在 numpy 中对于许多操作来说要快得多。
  • @jpp arr = np.arange(20) and k is 4 例如,我的意思是 arr 是一维数组,抱歉没有提及。

标签: python numpy


【解决方案1】:

您可以从arr 的 Hankel 矩阵(以及任意第二个参数;下面我们将其完全省略,在这种情况下默认使用零)中删除您想要的结果:

>>> import numpy as np                                                                                              
>>> from scipy import linalg
>>>
>>> arr = np.arange(10)**2 % 7   ##  just a random example      
>>> arr
array([0, 1, 4, 2, 2, 4, 1, 0, 1, 4])                                            
>>> k = 4                                                                                                           
>>> linalg.hankel(arr)[:arr.size-k+1, :k]                                              
array([[0, 1, 4, 2],                                                                                                
       [1, 4, 2, 2],                                                                                                
       [4, 2, 2, 4],                                                                                                
       [2, 2, 4, 1],                                                                                                
       [2, 4, 1, 0],
       [4, 1, 0, 1],
       [1, 0, 1, 4]])

或者你可以使用http://scikit-image.org/docs/dev/api/skimage.util.html#skimage.util.view_as_windows

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-15
    • 2022-01-05
    • 2021-11-18
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多