我注意到一些numpy操作使用一个名为shape
的参数,例如np.zeros
,而其他一些操作使用一个名为size
的参数,例如np.random.randint
。对我来说,这些参数具有相同的功能,它们有不同的名称有点令人困惑。实际上,size
似乎有些不合适,因为它实际上指定了输出的.shape
。
是否有不同的命名原因,它们传达了不同的含义,即使它们最终都等于输出的.shape
?
形状
指的是N维数组的维度大小。
大小
指的是数组中包含的元素数量(或个数)(有时也可以表示为数组的顶部维度,当用作长度时)。
例如,假设a
是一个矩阵。
1 2 3 4
5 6 7 8
9 10 11 12
a
的形状为 (3, 4)
,a
的大小为 12,a[1]
的大小为 4。
randint
要求一个大小(int),但实际上可以接受元组(在 numpy 中通常被解释为形状)。 - armatitaa.shape.prod() = a.size
。 - Euler_Saltershape
和size
。在参数中,它们具有相同的目的,并且不遵循您指出的关系。(它们遵循shape
== size
) - Mayou36size
指的是你的数组有多大。此外,如果你可以传递np.zeros(10)
或np.zeros((10))
。虽然差别微小,但这种方式传递的size
将为您创建一个1D数组。您可以给size=(n1, n2, ..., nn)
,这将创建一个nD数组。array.reshape
允许您从1D获取到nD数组。因此,当您调用shape
时,您会得到数组的N维形状,因此您可以准确地看到您的数组的外观。size
等于shape
元素的乘积。
编辑:名称的差异可以归因于两个部分:首先,您可以使用大小初始化数组。但是,您不知道它的形状。因此,size
仅用于元素的总数。其次,numpy的开发方式不同,不同的人在代码的不同部分工作,根据他们对代码的个人看法,为大致相同的元素赋予不同的名称。
np.zeros(10)
和 np.zeros((10))
的区别来解释什么。你是不是指的是 np.zeros((10, ))
(也就是说,第二个实际上是一个元组)? - alichaudry[[-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
size = np.prod(shape)
,因此参数名称的区别确实应该更加明显。 - armatitarandint
使用size
参数名称,但在解释中使用shape
。这不应与真正的size
属性混淆。 - hpaulj