簡體   English   中英

形狀為(N,M)和(N,)的數組之間的廣播操作

[英]Broadcast operation between arrays of shape (N, M) and (N,)

這是一個相當簡單的問題,但我似乎找不到答案。 考慮兩個簡單的數組:

import numpy as np
a = np.random.uniform(0., 1., (2, 1000))
b = np.random.uniform(0., 1., (2,))

我想要執行操作a - b以便最終數組為([[a[0] - b[0], a[1] - b[1]]) ,我得到

ValueError: operands could not be broadcast together with shapes (2,1000) (2,) 

如何執行此(或其他)操作?

根據一般廣播規則

在兩個數組上進行操作時,NumPy逐元素比較其形狀。 它從尾隨尺寸開始,一直向前發展。 兩種尺寸兼容

  1. 它們相等,或者
  2. 其中之一是1

出現錯誤是因為無法廣播a (1000)和b (2)的最后維度; 你可以轉換b到形狀的2D陣列(2, 1)使得1 - >(可廣播到) 10002 - >(可廣播到) 2

a - b[:,None]                            
#array([[ 0.06475683, -0.43773571, -0.62561564, ...,  0.05205518,
#        -0.1209487 ,  0.16334639],
#       [ 0.58443617,  0.28764136,  0.75789299, ...,  0.18159133,
#         0.28548633, -0.12037869]])

要么

a - b.reshape(2,1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM