2017-06-28 150 views
2

我注意到一些numpy操作采用了名为shape的参数,例如np.zeros,而其他一些参数则采用了size的参数,例如np.random.randint。对我而言,这些论点具有相同的功能,而且它们具有不同的名称这一点有点令人困惑。实际上,size似乎有点偏离,因为它确实指定了输出的.shapenumpy:尺寸与形状?

是否有不同名称的原因,它们是否表达了不同的含义,即使它们最终都等于输出的.shape

+2

我不这么认为。其社区发展。它并不总是容易确保一致性。我赞同你。 Shape(在numpy上下文中)对我来说似乎是参数名称的更好选择。两者之间的实际关系是'size = np.prod(shape)',所以在参数名称中的区别应该更加明显一些。 – armatita

+0

'randint'使用'size'参数名称,但在解释中使用'shape'。这不要与真正的“尺寸”属性混淆。 – hpaulj

回答

0

Shape涉及N维阵列的尺寸的尺寸。

Size关于阵列,涉及被包含在数组中的元素量(或计数)(或有时,在阵列的顶部尺寸 - 用作长度时)。

例如,让a是矩阵

1 2 3 4 
5 6 7 8 
9 10 11 12 

a形状(3, 4),的a大小为12和a[1]大小为4。

+2

我认为OP理解这一点。他/她质疑争论名称的选择。例如,'randint'要求大小(int),但实际上可以带有元组(它在numpy中通常被解释为一个形状)。 – armatita

1

因为你有工作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,不同的人在代码的不同部分工作,根据他们对代码的个人愿景给出大致相同的元素的不同名称。