【发布时间】:2016-04-25 21:36:52
【问题描述】:
我在理解多维数组的 numpy 索引时遇到了很多麻烦。在我正在使用的这个示例中,假设我有一个 2D 数组 A,它是 100x10。然后我有另一个数组 B,它是一个 100x1 一维数组,包含 0-9 之间的值(A 的索引)。在 MATLAB 中,我将使用 A(sub2ind(size(A), 1:size(A,1)', B) 为 A 的每一行返回存储在 B 的相应行中的索引处的值。
所以,作为一个测试用例,假设我有这个:
A = np.random.rand(100,10)
B = np.int32(np.floor(np.random.rand(100)*10))
如果我打印它们的形状,我会得到:
print A.shape returns (100L, 10L)
print B.shape returns (100L,)
当我尝试天真地(错误地)使用 B 对 A 进行索引时
Test1 = A[:,B]
print Test1.shape returns (100L, 100L)
如果我这样做了
Test2 = A[range(A.shape[0]),B]
print Test2.shape returns (100L,)
这就是我想要的。我无法理解这里所做的区分。在我看来, A[:,5] 和 A[range(A.shape[0]),5] 应该返回相同的东西,但它不在这里。 : 与使用 range(sizeArray) 有什么不同,range(sizeArray) 只是从 [0:sizeArray] (含)创建一个数组以使用索引?
【问题讨论】:
-
尝试相同,但将
np.arange(A.shape[0])[:,None]作为第一个索引。