我注意到一些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