我一直试图执行一个简单的操作,但是我似乎找不到一种简单的方法来使用Numpy函数而不创建不必要的数组副本。
假设我们具有以下3维数组:
In [171]: x = np.arange(24).reshape((4, 3, 2))
In [172]: x
Out[172]:
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15],
[16, 17]],
[[18, 19],
[20, 21],
[22, 23]]])
和以下数组:
In [173]: y = np.array([0, 1, 1, 0])
我想x
为每行选择最后一个维度的值,该维度的索引是中的相应元素y
。换句话说,我想要:
array([[ 0, 2, 4],
[ 7, 9, 11],
[13, 15, 17],
[18, 20, 22]])
我目前唯一的解决方案是在x
and的第一个维度上使用for循环y
,如下所示:
z = np.zeros((4, 3), dtype=int)
for i, row in enumerate(x):
z[i, :] = row[:, y[i]]
有没有办法避免使用numpy函数或奇特的索引进行for循环?
谢谢!
棘手的方面是,您不希望每个切片都具有所有的第0维,而是希望这些切片与第0维中的每个元素相对应。因此,您可以执行以下操作:
>>> x[np.arange(x.shape[0]), :, y]
array([[ 0, 2, 4],
[ 7, 9, 11],
[13, 15, 17],
[18, 20, 22]])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句