【发布时间】:2015-11-16 20:04:37
【问题描述】:
我一直在尝试执行一个简单的操作,但我似乎无法找到一种简单的方法来使用 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 和y 的第一个维度上使用for 循环,如下所示:
z = np.zeros((4, 3), dtype=int)
for i, row in enumerate(x):
z[i, :] = row[:, y[i]]
有没有办法在这里避免 for 循环,使用 numpy 函数或花哨的索引?
谢谢!
【问题讨论】:
-
您的
y数组是一维的,而不是二维的(也影响标题)。 -
另见当前 SO 问题:stackoverflow.com/questions/33735987/…
-
我会很乐意更新标题,我不知道如何解释它......你有什么建议吗? :)
标签: python arrays numpy indexing