【发布时间】:2015-02-01 08:12:12
【问题描述】:
是否有一种简单的方法可以使用索引数组沿最后一维索引 numpy 多维数组?例如,取一个形状为(10, 10, 20) 的数组a。假设我有一个索引数组b,形状为(10, 10),因此结果将是c[i, j] = a[i, j, b[i, j]]。
我尝试了以下示例:
a = np.ones((10, 10, 20))
b = np.tile(np.arange(10) + 10, (10, 1))
c = a[b]
但是,这不起作用,因为它会尝试像a[b[i, j], b[i, j]] 那样进行索引,这与a[i, j, b[i, j]] 不同。等等。有没有不使用循环的简单方法来做到这一点?
【问题讨论】:
-
只是为了确保我理解正确,你想要
c[i, j] = a[i, j, b[i, j]] -
@mgilson 是的。应该更清楚地说明这一点。
-
这通常像
c = a[np.arange(b.shape[0]), np.arange(b.shape[1]), b]一样完成,但我希望有更好的方法。 -
@moarningsun 我的正确性测试失败了。我认为您必须将两个范围之一转换为列向量左右。