您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Python報錯ValueError:operands could not be broadcast together with shapes怎么解決”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python報錯ValueError:operands could not be broadcast together with shapes怎么解決”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
在做矩陣數據的歸一化處理時,遇到個報錯:ValueError: operands could not be broadcast together with shapes (2,32) (2,)
。
源碼片段如下:
def normalization(X, set_axis): # for 2d matrix Xmin = np.min(X, axis=set_axis) # axis=0, the col min; else, the row min; Xmax = np.max(X, axis=set_axis) Xmu = np.mean(X, axis=set_axis) # print(Xmin.shape) X_norm = (X - Xmu) / (Xmax - Xmin) return X_norm X = np.arange(0, 64).reshape(2, 32) X_norm = normalization(X, 1)
根據矩陣乘法廣播擴展的原則,只要有一個維度的大小相同就能擴展,但這里卻失敗了,仔細定位了下,終于找到原因。
問題根因
最后的原因竟然是:打印Xmin.shape
后顯示的結果(2,)
,個人理解錯誤。 原以為:(2,)表示的是兩行一列的意思,而實際上(2,)表示只有1維,是個向量。
雖然該向量本質也是一行兩列,但是為了向量運算方便,不區分方向、行列,而廣播支持的必須是矩陣,維度必須2維及以上。
所以解決方法是升維成二維矩陣,需要將Xmin擴維成矩陣,最后的shape表示為(2,1)
,表征2行1列二維數據,之后就可以進行廣播運算了。
由此可以看出,對基礎知識的深入理解很重要。
修改方法
在源碼片段第4行后,添加如下其中一種代碼即可:
# 擴維方法1 Xmin= Xmin[:, np.newaxis] # 從列的維度擴維, shape成(2, 1) Xmax= Xmax[:, np.newaxis] # [np.newaxis, :]則是從行的維度擴維,shape成(1, 2) Xmu= Xmu[:, np.newaxis] # 擴維方法2 Xmin = Xmin.reshape(X.shape[0], 1) Xmax = Xmax.reshape(X.shape[0], 1) Xmu = Xmu.reshape(X.shape[0], 1)
對該知識點的深入,可以小結為,[]
表示一個維度,如只有一個[]
,則表示向量,兩個嵌套則表示二維矩陣,3個嵌套則表示三維矩陣。
要做廣播的基礎,首先是一維以上的矩陣,系統不支持一維向量的廣播擴展。
代碼示例如下:
import numpy as np x1 = [1, 2] # 一維向量,沒有行列之分,只有元素個數 x2 = [[1], [2]] # 二維矩陣,大小為:2*1 x3 = [[1, 2], [3, 4]] # 二維矩陣,大小為:2*2 x1 = np.array(x1) x2 = np.array(x2) x3 = np.array(x3) print(x1.shape) print(x2.shape) print(x3.shape)
讀到這里,這篇“Python報錯ValueError:operands could not be broadcast together with shapes怎么解決”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。