1

我在使用多维向量作为多维向量的索引时遇到问题。假设我有 C.ndim == idx.shape[0],那么我希望 C[idx] 给我一个元素。请允许我用一个简单的例子来解释:

A = arange(0,10)
B = 10+A
C = array([A.T, B.T])
C = C.T
idx = array([3,1])

现在,C[3] 给了我第三行,而 C[1] 给了我第一行。C[idx] 然后会给我两行的 vstack。但是,我需要得到 C[3,1]。我将如何实现给定的数组 C,idx?

/edit:答案建议元组(idx)。这项工作非常适合单个 idx。但是:让我们更进一步:假设 INDICES 是一个向量,我在其中垂直堆叠了形状为 idx 的数组。tuple(INDICES) 会给我一个长元组,所以 C[tuple(INDICES)] 不起作用。有没有一种干净的方法可以做到这一点,还是我需要遍历行?

4

1 回答 1

2

如果您转换idx为 a tuple,它将被解释为基本索引而不是高级索引:

>>> C[3,1]
13
>>> C[tuple(idx)]
13

对于向量情况:

>>> idx
array([[3, 1],
       [7, 0]])
>>> C[3,1], C[7,0]
(13, 7)
>>> C[tuple(idx.T)]
array([13,  7])
>>> C[idx[:,0], idx[:,1]]
array([13,  7])
于 2013-11-10T14:55:41.767 回答