亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python - 在具有相同“外部”大小的數組之間廣播

python - 在具有相同“外部”大小的數組之間廣播

LEATH 2021-06-07 09:50:16
Numpy 似乎對廣播數組有一些(對我而言)不直觀的行為。假設我們有兩個數組a = numpy.ones((2,2,3))b = numpy.array([[1],[2]])我希望能夠將這些相乘,輸出為>>> a*barray([[[1., 1., 1.],        [1., 1., 1.]],       [[2., 2., 2.],        [2., 2., 2.]]])然而,我們得到>>> a*barray([[[1., 1., 1.],        [2., 2., 2.]],       [[1., 1., 1.],        [2., 2., 2.]]])事實上,這種乘法僅僅工作,因為該第二的尺寸a是相同的外尺寸b(圖2,在這種情況下)。如果我們有a = numpy.ones((2,3,3)),我會收到以下錯誤:>>> a*bTraceback (most recent call last):  File "<stdin>", line 1, in <module>ValueError: operands could not be broadcast together with shapes (2,3,3) (2,1)我覺得這很奇怪的原因是,將具有形狀 (3,4) 和 (1,) 的數組一起廣播會很好地工作 - 那么為什么當它們是兩個較大數組的“子數組”時它不起作用?什么是最“pythonic”的方式來做我想做的事?具體來說,這是為了創建一個 3D ndarray,其中每個 2D 子數組都具有重復的不同值。顯然我可以只使用循環,但它看起來并不優雅。
查看完整描述

2 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

怎么樣?


a = np.ones((2,2,3))

b = np.array([[[1],

              [1]],

               [[2],

              [2]]])


print(a*b)



array([[[1., 1., 1.],

        [1., 1., 1.]],


       [[2., 2., 2.],

        [2., 2., 2.]]])


查看完整回答
反對 回復 2021-06-09
  • 2 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號