Python numpy:“我不知道;“尺寸”;vs.“;形状“;在函数参数中?

Python numpy:“我不知道;“尺寸”;vs.“;形状“;在函数参数中?,python,numpy,Python,Numpy,我注意到一些numpy操作使用名为shape的参数,如np.zeros,而另一些操作使用名为size的参数,如np.random.randint。对我来说,这些参数具有相同的功能,而且它们具有不同的名称这一事实有点令人困惑。实际上,size似乎有点不合适,因为它确实指定了输出的.shape 是否有理由使用不同的名称,即使它们最终都等于输出的.shape,它们是否表达了不同的含义?shape与N维数组的维度的大小有关 大小关于数组,与数组中包含的元素的数量(或计数)有关(有时,当用作长度时,位于数

我注意到一些numpy操作使用名为
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)
vs
np.zero(10))
来解释什么。你是说
np.zero((10,)
(也就是说,第二个实际上是一个元组)?