对于数组:
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列?
答案 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行,但是它没有改变你正在采用一个子集,而不是一个元素。