在關于廣播規(guī)則的文件中,指出在以下任一情況下,兩個維度是兼容的:它們相等或其中之一是1通過顯示的一些示例,這一點變得很清楚,例如:A (4d array): 8 x 1 x 6 x 1B (3d array): 7 x 1 x 5Result (4d array): 8 x 7 x 6 x 5這似乎很清楚。但是,我無法找到一個具體的例子/解釋,為什么當1d數組的形狀與2d數組的第二軸的形狀兼容時,1D數組只能用2d數組廣播。例如:np.ones((2,3)) * np.arange(3)array([[0., 1., 2.], [0., 1., 2.]])正如預期的那樣,1d arange已跨行廣播。但是,如果我們這樣做:np.ones((3, 2)) * np.arange(3)值錯誤: 操作數不能與形狀一起廣播 (3,2) (3,)我們收到不兼容形狀的錯誤。這可能很簡單,但我只想知道哪個是正確的解釋。這背后的原因是,當涉及到廣播規(guī)則時,1d數組被視為列向量,因此沿著2d數組上的第二個軸檢查形狀兼容性?對于較大的陣列,是否始終根據較大 ndarray 上的最后一個軸進行檢查?
1 回答

弒天下
TA貢獻1818條經驗 獲得超8個贊
這背后的原因是,當涉及到廣播規(guī)則時,1d數組被視為列向量,因此沿著2d數組上的第二個軸檢查形狀兼容性?
相反,它們被視為行向量并垂直堆疊。您可以在相關文章中的此圖中看到它。
在您演示的情況下,您可以執(zhí)行相同的草圖:
A 3 x 2 # np.ones((3, 2))
B 2 x 3 # np.ones((2, 3))
C 3 # np.arange(3)
這里不起作用,但確實如此。這是因為沿第一個維度(即行)重復。您可以將缺失的尺寸想象為通過復制后面的尺寸來“調整大小”A*CB*CC
添加回答
舉報
0/150
提交
取消