我在理解多維數組的numpy索引時遇到了很多麻煩。在我正在使用的這個例子中,假設我有一個二維數組A,它是100x10。然後我有另一個數組B,它是一個0到9之間的100x1 1D值的數組(A的索引)。在MATLAB中,我會用A(sub2ind(size(A), 1:size(A,1)', B)
來換取的每一行,存儲B的相應行中Numpy索引行爲
所以索引處的值,作爲一個測試案例,讓我們說我有這樣的:
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,)
當我嘗試指標分爲A採用B天真的(錯誤地)
Test1 = A[:,B]
print Test1.shape returns (100L, 100L)
但如果我做
Test2 = A[range(A.shape[0]),B]
print Test2.shape returns (100L,)
這就是我想要的。我無法理解這裏所做的區分。在我看來,A [:,5]和A [範圍(A.shape [0]),5]應該返回相同的東西,但它不在這裏。 :
與使用range(sizeArray)
有什麼不同,它只是從[0:sizeArray]中創建一個數組來使用索引?
可能重複[改變numpy數組與索引數組](http://stackoverflow.com/questions/30379663/changing-numpy-array-with-array-of- index) – shx2
嘗試使用'np.arange(A.shape [0])[:,None]'作爲第一個索引。 – hpaulj