我不明白下面的行爲。 numpy數組通常可以通過索引訪問,所以[:,1]應該等同於[:] [1],或者我想。有人可以解釋爲什麼事實並非如此嗎?numpy array slicing uncpected results
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> a[:,1]
array([2, 5])
>>> a[:][1]
array([4, 5, 6])
謝謝!
我不明白下面的行爲。 numpy數組通常可以通過索引訪問,所以[:,1]應該等同於[:] [1],或者我想。有人可以解釋爲什麼事實並非如此嗎?numpy array slicing uncpected results
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> a[:,1]
array([2, 5])
>>> a[:][1]
array([4, 5, 6])
謝謝!
這兩種形式的索引是不一樣的。您應該使用[i, j]
而不是[i][j]
。即使在兩者都起作用的情況下,第一個也會更快(見this question)。
使用兩個索引[i][j]
是兩個操作。它執行第一個索引,然後執行第一個操作的結果。 [:]
只是返回整個數組,因此您的第一個數組相當於array[1]
。由於只傳遞了一個索引,因此它假定引用第一維(行),所以這意味着「獲得第一行」。使用一個複合索引[i, j]
是同時使用兩個索引條件的單個操作,因此array[:, 1]
返回「所有行,第1列」。
[:]創建列表的副本...
所以這是基本相同
array[1] == array[:][1]
其正確返回在這種情況下[4,5,6]
而array[:,1]
說返回第一列的確是[2,5]
例如
a = [
[1,2,3],
[4,5,6]
]
,從而可以看到列0(a[:,0]
)將是[1,4]
和柱2(a[:,2]
)將[3,6]
同時a[1]
是指第1行(或[4,5,6]) 和a[0]
將是0行(或[1,2,3])
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> a[:,1]
array([2, 5])
您選擇第二維(矩陣的列),並取該維度中的元素1。同樣的方法,a[:,0]
選擇第一列,這裏是array([1,4])
,a[:,2]
第三列。
如前所述,a[:]
複製您的列表(是一個numpy數組或列表)。
那麼,爲什麼在第一種情況下是不一樣的呢? [[,]]有不同的含義嗎? – James
參見編輯...基本上'a [1]!= a [:,1]' –