gpt4 book ai didi

python - Numpy - 轴中的数组范围索引

转载 作者:太空宇宙 更新时间:2023-11-04 02:22:34 25 4
gpt4 key购买 nike

例如,如果我有 Numpy 数组,它被初始化为:

a = np.arange(12).reshape(6,2)
[out] array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11]])

mask = np.array([0, 2])

我的目标是按轴中的范围屏蔽数组。像这样

for i in mask:
target.append(a[i:i+3,:])

所以,应该是:

[out] array([[[0, 1],
[2, 3],
[4, 5]],

[[4, 5],
[6, 7],
[8, 9]]])

但这是低效的。然后,我试过了

a[mask:mask+3,:]

但是它说

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: only integer scalar arrays can be converted to a scalar index

最佳答案

方法 #1

我们可以利用 broadcasting生成所有索引和索引 -

In [19]: a
Out[19]:
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11]])

In [21]: mask
Out[21]: array([0, 2])

In [24]: a[mask[:,None] + np.arange(3)]
Out[24]:
array([[[0, 1],
[2, 3],
[4, 5]],

[[4, 5],
[6, 7],
[8, 9]]])

方法 #2

我们还可以利用 np.lib.stride_tricks.as_strided基于 scikit-image's view_as_windows以获得更有效的解决方案-

In [43]: from skimage.util.shape import view_as_windows

In [44]: view_as_windows(a,(3,a.shape[1]))[mask][:,0]
Out[44]:
array([[[0, 1],
[2, 3],
[4, 5]],

[[4, 5],
[6, 7],
[8, 9]]])

关于python - Numpy - 轴中的数组范围索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51213309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com