我陷入了这个问题。谁能解释这两者之间的区别?
np.zeros ((1,2))
产生
[[0. 0.]]
和
np.zeros((2,))
产生
[0. 0.]
答案 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)
的形状表示两个维度,其中第一个维度恰好只有一个索引,即它是具有一行的矩阵。