我不明白下面的行为。numpy 数组通常可以通过索引访问,所以 [:,1] 应该等同于 [:][1],或者我认为。有人可以解释为什么不是这样吗?
>>> 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]
. 由于只传递了一个索引,它假定引用第一个维度(行),因此这意味着“获取第 1 行”。使用一个复合索引[i, j]
是一次同时使用两个索引条件的单个操作,因此array[:, 1]
返回“所有行,第 1 列”。
[:] 创建您的列表的副本...
所以这本质上是一样的
array[1] == array[:][1]
在这种情况下正确返回[4,5,6]
whilearray[:,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 数组或列表)。