我不明白下面的行为。 numpy数组通常可以通过索引来访问,所以[:,1]应该等同于[:] [1],或者我认为。有人可以解释为什么不是这样吗?
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> a[:,1]
array([2, 5])
>>> a[:][1]
array([4, 5, 6])
谢谢!
答案 0 :(得分:5)
这两种形式的索引不一样。您应该使用[i, j]
而不是[i][j]
。即使两者都有效,第一个也会更快(见this question)。
使用两个索引[i][j]
是两个操作。它执行第一个索引,然后在第一个操作的结果上执行第二个索引。 [:]
只返回整个数组,因此您的第一个数字相当于array[1]
。由于只传递了一个索引,因此假定它引用第一个维度(行),因此这意味着“获取行1”。使用一个复合索引[i, j]
是一次使用两个索引条件的单个操作,因此array[:, 1]
返回“所有行,第1列”。
答案 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])
答案 2 :(得分:0)
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> a[:,1]
array([2, 5])
选择第二个维度(矩阵的列)并在此维度中取得元素1。以同样的方式,a[:,0]
选择第一列,此处为array([1,4])
,a[:,2]
为第三列。
如前所述,a[:]
复制您的列表(是一个numpy数组或列表)。