我注意到一些numpy操作采用了名为shape
的参数,例如np.zeros
,而其他一些参数则采用了size
的参数,例如np.random.randint
。对我而言,这些论点具有相同的功能,而且它们具有不同的名称这一点有点令人困惑。实际上,size
似乎有点偏离,因为它确实指定了输出的.shape
。numpy:尺寸与形状?
是否有不同名称的原因,它们是否表达了不同的含义,即使它们最终都等于输出的.shape
?
我注意到一些numpy操作采用了名为shape
的参数,例如np.zeros
,而其他一些参数则采用了size
的参数,例如np.random.randint
。对我而言,这些论点具有相同的功能,而且它们具有不同的名称这一点有点令人困惑。实际上,size
似乎有点偏离,因为它确实指定了输出的.shape
。numpy:尺寸与形状?
是否有不同名称的原因,它们是否表达了不同的含义,即使它们最终都等于输出的.shape
?
Shape
涉及N维阵列的尺寸的尺寸。
Size
关于阵列,涉及被包含在数组中的元素量(或计数)(或有时,在阵列的顶部尺寸 - 用作长度时)。
例如,让a
是矩阵
1 2 3 4
5 6 7 8
9 10 11 12
的a
形状(3, 4)
,的a
大小为12和a[1]
大小为4。
我认为OP理解这一点。他/她质疑争论名称的选择。例如,'randint'要求大小(int),但实际上可以带有元组(它在numpy中通常被解释为一个形状)。 – armatita
因为你有工作numpy数组,看作是一个C数组,size
指的是数组的大小。此外,如果您可以通过np.zeros(10)
或np.zeros((10))
。虽然差别很微妙,size
通过这种方式会创建一个1D数组。你可以给size=(n1, n2, ..., nn)
这将创建一个nD数组。
但是,因为python用户需要多维数组,所以array.reshape
允许您从1D到nD数组。所以,当你打电话给shape
时,你会得到数组的N维形状,所以你可以看到数组的样子。
实质上,size
等于shape
的元素的乘积。
编辑:名称的差异可归因于2个部分:首先,您可以初始化您的数组大小。但是,你不知道它的形状。因此size
仅适用于元素的总数。其次,如何开发numpy,不同的人在代码的不同部分工作,根据他们对代码的个人愿景给出大致相同的元素的不同名称。
我不这么认为。其社区发展。它并不总是容易确保一致性。我赞同你。 Shape(在numpy上下文中)对我来说似乎是参数名称的更好选择。两者之间的实际关系是'size = np.prod(shape)',所以在参数名称中的区别应该更加明显一些。 – armatita
'randint'使用'size'参数名称,但在解释中使用'shape'。这不要与真正的“尺寸”属性混淆。 – hpaulj