Python numpy:“我不知道;“尺寸”;vs.“;形状“;在函数参数中?
我注意到一些numpy操作使用名为Python numpy:“我不知道;“尺寸”;vs.“;形状“;在函数参数中?,python,numpy,Python,Numpy,我注意到一些numpy操作使用名为shape的参数,如np.zeros,而另一些操作使用名为size的参数,如np.random.randint。对我来说,这些参数具有相同的功能,而且它们具有不同的名称这一事实有点令人困惑。实际上,size似乎有点不合适,因为它确实指定了输出的.shape 是否有理由使用不同的名称,即使它们最终都等于输出的.shape,它们是否表达了不同的含义?shape与N维数组的维度的大小有关 大小关于数组,与数组中包含的元素的数量(或计数)有关(有时,当用作长度时,位于数
shape
的参数,如np.zeros
,而另一些操作使用名为size
的参数,如np.random.randint
。对我来说,这些参数具有相同的功能,而且它们具有不同的名称这一事实有点令人困惑。实际上,size
似乎有点不合适,因为它确实指定了输出的.shape
是否有理由使用不同的名称,即使它们最终都等于输出的
.shape
,它们是否表达了不同的含义?shape
与N维数组的维度的大小有关
大小
关于数组,与数组中包含的元素的数量(或计数)有关(有时,当用作长度时,位于数组的顶部维度)
例如,将a
设为矩阵
1 2 3 4
5 6 7 8
9 10 11 12
a
的形状是(3,4)
,a
的大小是12,a[1]
的大小是4。因为您使用的是一个numpy数组,它被视为一个C数组,大小是指数组的大小。此外,如果您可以传递np.zero(10)
或np.zero((10))
。虽然差别很小,但通过这种方式传递的size
将创建1D数组。您可以给出size=(n1,n2,…,nn)
,它将创建一个nD数组
但是,由于python用户需要多维数组,array.reshape
允许您从一维数组转换为nD数组。因此,当您调用shape
时,您将得到数组的N维形状,这样您就可以准确地看到数组的外观
本质上,大小
等于形状
元素的乘积
编辑:名称上的差异可归因于两个部分:首先,您可以使用大小初始化数组。然而,你不知道它的形状。因此,size
仅用于元素总数。其次,numpy是如何开发的,不同的人处理代码的不同部分,根据他们对代码的个人看法,为大致相同的元素赋予不同的名称 我不这么认为。它的社区得到了发展。确保一致性并不总是容易的。我同意你的看法。在我看来,Shape(在numpy上下文中)似乎是参数名的更好选项。两者之间的实际关系是size=np.prod(shape)
,因此在参数名称中的区别确实应该更加明显。randint
使用size
参数名称,但在解释中使用shape
。这不能与真实的size
属性混淆。我建议您更改标题,以更好地反映您谈论的是参数名称而不是属性这一事实。@Mayou36好建议。完成。为什么不接受答案?我想OP明白这一点。他/她对论点的名称选择提出质疑。例如,randint
要求一个大小(int),但实际上可以取元组(在numpy中通常被解释为一个形状)。我想我们可以说a.shape.prod()=a.size
@Euler\u Salter,是的,但这不是问题所在。问题是关于参数名称shape
和size
。在辩论中,他们的目的是一样的,不符合你所指出的关系。(它们遵循形状
==大小
)我不确定你想用np.zero(10)
vsnp.zero(10))
来解释什么。你是说np.zero((10,)
(也就是说,第二个实际上是一个元组)?