網站首頁 編程語言 正文
解決Python報錯:ValueError:operands?could?not?be?broadcast?together?with?shapes_python
作者:來知曉 ? 更新時間: 2023-05-22 編程語言問題描述
在做矩陣數據的歸一化處理時,遇到個報錯: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)
參考資料
How to Fix: ValueError: Operands could not be broadcast together with shapes?
總結
原文鏈接:https://blog.csdn.net/qq_17256689/article/details/127911882
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-07-30 HadoopWindows下客戶端環境配置
- 2022-05-20 Python異常之常見的Bug類型解決方法_python
- 2022-07-09 Python?對數字的千分位處理方式_python
- 2022-04-07 C#異步編程async/await用法詳解_C#教程
- 2022-12-19 QT實現自定義Http客戶端的示例代碼_C 語言
- 2022-10-19 R語言安裝以及手動安裝devtools的詳細圖文教程_R語言
- 2022-01-09 Echarts|Stacked Line Chart(折線圖堆疊)Y軸數據不正確問題
- 2022-07-29 Python控制線程和函數超時處理_python
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支