1

我不明白下面的行为。numpy 数组通常可以通过索引访问,所以 [:,1] 应该等同于 [:][1],或者我认为。有人可以解释为什么不是这样吗?

>>> a = np.array([[1, 2, 3], [4, 5, 6]])  
>>> a[:,1]  
array([2, 5])  
>>> a[:][1]  
array([4, 5, 6])

谢谢!

4

3 回答 3

5

这两种索引形式并不相同。你应该使用[i, j]而不是[i][j]. 即使两者都起作用,第一个也会更快(请参阅this question)。

使用两个索引[i][j]是两个操作。它执行第一个索引,然后对第一个操作的结果执行第二个索引。 [:]只返回整个数组,所以你的第一个相当于array[1]. 由于只传递了一个索引,它假定引用第一个维度(行),因此这意味着“获取第 1 行”。使用一个复合索引[i, j]是一次同时使用两个索引条件的单个操作,因此array[:, 1]返回“所有行,第 1 列”。

于 2013-05-18T19:06:36.983 回答
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])

于 2013-05-18T19:01:01.803 回答
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 数组或列表)。

于 2013-05-18T19:07:45.803 回答