網站首頁 編程語言 正文
解決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
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2021-10-04 Flutter輸入框TextField屬性及監聽事件介紹_Android
- 2022-08-22 Git遠程刪除某個歷史提交記錄方法詳解_相關技巧
- 2023-02-12 Golang反射模塊reflect使用方式示例詳解_Golang
- 2022-08-28 配置zabbix監控nginx狀態,監控華為路由器
- 2024-01-12 間隙鎖(Gap Lock)
- 2024-01-29 Linux信號量以及基于環形隊列的生產者消費者模型
- 2022-04-16 十分鐘學會C++?Traits_C 語言
- 2024-01-11 redis開啟密碼驗證
- 欄目分類
-
- 最近更新
-
- 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同步修改后的遠程分支