numpy数组形状的差异

时间:2015-03-20 17:57:46

标签: python numpy

对于数组:

import numpy as np
arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> arr2d
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> arr2d[2].shape
(3,)
>>> arr2d[2:,:].shape
(1, 3)

当两个语句都返回第3行时,为什么会得到不同的形状?并且在两种情况下结果都不应该是(1,3),因为我们返回一行有3列?

2 个答案:

答案 0 :(得分:5)

  

当两个语句都返回第3行时,为什么我会得到不同的形状?

因为在第一个操作中,您正在为行编制索引,并且只选择一个元素,如多维数组的single-element indexing段中所述 - 返回一个具有较低维度的数组(一维数组)。

在第二个例子中,您正在使用slice,如冒号所示。切片操作不会减小阵列的尺寸。这也是合乎逻辑的,因为想象数组不会有3行而是4行。然后arr2d[2:,:].shape将是(2,3)。 numpy的开发人员使切片操作保持一致,因此他们(切片)永远不会减少数组的维数。

  

并且在两种情况下结果都不应该是(1,3),因为我们返回的是一行有3列?

不,只是因为以前的原因。

答案 1 :(得分:1)

执行arr2d[2]时,您正在从阵列中取出一行;

当执行arr2d[2:, :]时,你从数组中取出一部分行('切片'),在这种情况下是从第3行开始到结尾的行,这只是第3行,但是它没有改变你正在采用一个子集,而不是一个元素。