numpy np.zeros((1,2))与np.zeros((2,))的差异

时间:2019-01-31 13:34:18

标签: python numpy

我陷入了这个问题。谁能解释这两者之间的区别?

np.zeros ((1,2))

产生

[[0. 0.]]

np.zeros((2,))

产生

[0. 0.]

3 个答案:

答案 0 :(得分:3)

对于np.zeros主参数中的每个elenemt,该函数将向输出向量添加新维度。

您的第一个代码np.zeros ((1,2))产生一个具有二维的数组,第一个维度为一个元素,第二个维度为两个元素,因此

[[0.]
[0.]]

第二段代码的主参数中只有一个元素,该参数被翻译为“一个维,该维中有两个元素”。因此,您的np.zeros((2,))的输出将与np.zeros(2)的输出相同:

array([0., 0.])

您可以尝试第三维,以便进一步了解它:

np.zeros((1,2,1))
array([[[0.],
        [0.]]])

简而言之,每个方括号根据函数np.zeros的第一个参数中的元素添加到新的维度。

答案 1 :(得分:1)

这就是我的想法。

This answer有帮助地指出,“行”和“列”不是NumPy数组的精确平行,它可以具有n个维。而是,每个尺寸或轴由一个数字(大小,具有多少个成员)表示,并由另外一对方括号表示。

因此大小为5的一维数组不是行或列,而只是一维数组。初始化np.zeros ((1,2))时,第一个维度的大小为1,第二个维度的大小为2,因此您将获得一个带有两个成对括号的1 x 2矩阵。调用np.zeros((2,))时,它只是尺寸为2的一维,因此得到array([0., 0.])。我也觉得这很混乱-希望有道理!

答案 2 :(得分:0)

在第一个项目中,项目将被索引为[0][0][0][1],在第二个项目中,项目将被索引[0][1]

(1,2)的形状表示两个维度,其中第一个维度恰好只有一个索引,即它是具有一行的矩阵。