廣播規則適用於另外還有,
In [7]: np.array([])+np.array([1.])
Out[7]: array([], dtype=float64)
In [8]: np.array([])+np.array([1.,2.])
....
ValueError: operands could not be broadcast together with shapes (0,) (2,)
讓我們看一下形狀。
In [9]: np.array([]).shape,np.array([1.]).shape,np.array([1,2]).shape
Out[9]: ((0,), (1,), (2,))
(0,)和(1) - 的(1,)
可以被調節以匹配其他陣列的形狀。 A 1
可以調整維度以匹配其他數組,例如從1增加到3。但是在這裏它顯然是從1調整爲0.我通常不使用具有0維度的數組,但是這看起來像更高維度的適當概括。
嘗試(0,)和(1,1)。其結果是(1,0):
In [10]: np.array([])+np.array([[1.]])
Out[10]: array([], shape=(1, 0), dtype=float64)
(0,),(1,1)=>(1,0),(1,1)=>(1,0)
對於形狀爲(0,)和(2,)的第二種情況;沒有任何尺寸1的尺寸可以調整,因此是錯誤的。
形狀(0,)和(2,1)並廣播(以(2,0)):
In [12]: np.array([])+np.array([[1.,2]]).T
Out[12]: array([], shape=(2, 0), dtype=float64)
'兩個維度是當它們相等時兼容,或它們中的一個是1' - 這當然是真的,所以根據定義,兩者應該是廣播兼容的。然而,我沒有看到這對維數0和1有直觀的意義。 – cel
@cel:請參閱下面的答案 – Julien
@cel考慮'np.allclose([],1)'。它們的維數是'(0,)'和'()',所以既不等於也不等於1。這是唯一的兼容性規則? –