解決Python報錯:ValueError:operands?could?not?be?broadcast?together?with?shapes
問題描述
在做矩陣數(shù)據(jù)的歸一化處理時,遇到個報錯: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)
根據(jù)矩陣乘法廣播擴展的原則,只要有一個維度的大小相同就能擴展,但這里卻失敗了,仔細定位了下,終于找到原因。
問題解決
問題根因
最后的原因竟然是:打印Xmin.shape后顯示的結(jié)果(2,),個人理解錯誤。 原以為:(2,)表示的是兩行一列的意思,而實際上(2,)表示只有1維,是個向量。
雖然該向量本質(zhì)也是一行兩列,但是為了向量運算方便,不區(qū)分方向、行列,而廣播支持的必須是矩陣,維度必須2維及以上。
所以解決方法是升維成二維矩陣,需要將Xmin擴維成矩陣,最后的shape表示為(2,1),表征2行1列二維數(shù)據(jù),之后就可以進行廣播運算了。
由此可以看出,對基礎知識的深入理解很重要。
修改方法
在源碼片段第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)
進階舉例
對該知識點的深入,可以小結(jié)為,[]表示一個維度,如只有一個[],則表示向量,兩個嵌套則表示二維矩陣,3個嵌套則表示三維矩陣。
要做廣播的基礎,首先是一維以上的矩陣,系統(tǒng)不支持一維向量的廣播擴展。
代碼示例如下:
import numpy as np x1 = [1, 2] # 一維向量,沒有行列之分,只有元素個數(shù) 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)
參考資料
How to Fix: ValueError: Operands could not be broadcast together with shapes?
總結(jié)
到此這篇關于解決Python報錯:ValueError:operands could not be broadcast together with shapes的文章就介紹到這了,更多相關Python報錯ValueError內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Python ValueError: invalid literal for int() with base 10 實用解決方法
- Python異常?ValueError的問題
- 解決Python報錯Valueerror: Expected 2d Array Got 1d Array Instead
- Python中ValueError報錯的原因和解決辦法
- Python報錯ValueError: cannot reindex from a duplicate axis的解決方法
- Python報錯ValueError:?cannot?convert?float?NaN?to?integer的解決方法
- 解決Python報錯ValueError list.remove(x) x not in list問題
- Python中異常類型ValueError使用方法與場景
- Python ValueError: all input arrays must have the same shap的問題解決
相關文章
python+requests+pytest接口自動化的實現(xiàn)示例
這篇文章主要介紹了python+requests+pytest接口自動化的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04
Python如何向現(xiàn)有的DataFrame添加新列示例代碼
Pandas庫中的DataFrame是處理表格數(shù)據(jù)的主要數(shù)據(jù)結(jié)構(gòu),添加新列有多種方法,包括使用現(xiàn)有列的值、創(chuàng)建全為零或全為一的列、或者直接添加一個由特定值組成的列,這些方法在處理數(shù)據(jù)時非常有用,需要的朋友可以參考下2024-11-11

