numpy:“size”vs.函数参数中的“形状”?

s3fp2yjn  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(105)

我注意到一些numpy操作采用名为shape的参数,例如np.zeros,而另一些则采用名为size的参数,例如np.random.randint。对我来说,这些参数具有相同的功能,而它们具有不同名称的事实有点令人困惑。实际上,size看起来有点不对劲,因为它实际上指定了输出的.shape
有没有理由使用不同的名称,它们是否传达了不同的含义,即使它们最终都等于输出的.shape

1cklez4t

1cklez4t1#

Shape与N维数组的dimensions的大小有关。
Size关于数组,与数组中包含的元素的数量(或计数)有关(有时,在数组的顶部维度-当用作长度时)。
例如,设a为矩阵
a的形状是(3, 4)a的大小是12,a[1]的大小是4。

r6vfmomb

r6vfmomb2#

因为你正在使用一个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的元素的乘积。
编辑:名称的差异可以归因于两个部分:首先,你可以用一个大小初始化你的数组。你不知道它的形状。所以size只是元素的总数。其次,numpy是如何开发的,不同的人在代码的不同部分工作,大致相同的元素有不同的名称,这取决于他们对代码的个人看法。

z9gpfhce

z9gpfhce3#

随机排列:

[[-2. -1.  0.  1.  2.]
 [-2. -1.  0.  1.  2.]
 [-2. -1.  0.  1.  2.]]

区别在于:

print(your_np_arr.shape)  # (3, 5)
print(your_np_arr.size)   # 15

相关问题