多维切片

Multidimensional Slicing

提问人:chron0x 提问时间:3/26/2018 最后编辑:Cœurchron0x 更新时间:11/20/2018 访问量:111

问:

我想多次切出数组的某些部分。目前,我正在使用for循环,我想通过矩阵计算来替代它,以在速度方面获得更好的性能。foo

foo = np.arange(6000).reshape(6,10,10,10)
target = np.zeros((100,6,3,4,5))
startIndices = np.random.randint(5, size=(100))

这是我目前的方法。

for i in range(len(target)):
    startIdx=startIndices[i]
    target[i, :]=foo[:, startIdx:startIdx+3,
                        startIdx:startIdx+4,
                        startIdx:startIdx+5]

我试图将切片表示为数组,但找不到正确的表示形式。

数组 python-2.7 性能 numpy slice

评论


答:

3赞 Divakar 3/26/2018 #1

我们可以利用基于 np.lib.stride_tricks.as_strided 的 scikit-image view_as_windows进行有效的补丁提取,如下所示:

from skimage.util.shape import view_as_windows

# Get sliding windows (these are simply views)
WSZ = (1,3,4,5) # window sizes along the axes
w = view_as_windows(foo,WSZ)[...,0,:,:,:]

# Index with startIndices along the appropriate axes for desired output
out = w[:,startIndices, startIndices, startIndices].swapaxes(0,1)

相关:

NumPy Fancy Indexing - 从不同渠道裁剪不同的 ROI

从 NumPy 矩阵中满足条件的每一行中取 N 个第一个值

从多维 Numpy 数组行中选择随机窗口

如何从 numpy 数组中提取多个随机子序列