解决Python报错:ValueError:operands could not be broadcast together with shapes
作者:来知晓 时间:2021-05-14 12:04:53
问题描述
在做矩阵数据的归一化处理时,遇到个报错: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
标签:python,valueerror,报错
0
投稿
猜你喜欢
Pytorch中Softmax和LogSoftmax的使用详解
2022-09-24 07:36:19
用Python shell简化开发
2023-12-16 17:19:04
ASP.NET MVC中两个配置文件的作用详解
2024-05-13 09:17:08
python实现二级登陆菜单及安装过程
2023-09-16 16:05:44
python 从list中随机取值的方法
2021-10-06 04:08:11
Python OpenCV调用摄像头检测人脸并截图
2022-03-19 06:29:02
python日记(使用TCP实现的对话客户端和服务器)
2023-01-25 19:42:54
如何使用FSO搜索硬盘文件
2007-09-27 12:59:00
python使用递归解决全排列数字示例
2022-02-22 04:14:49
ASP动态页服务器端的处理原理
2007-09-14 10:07:00
Pytorch 如何实现LSTM时间序列预测
2023-06-26 01:04:24
SQL Server2016正式版安装配置方法图文教程
2024-01-18 10:21:52
扫盲大讲堂:mysql出错的代码解析及解答
2009-09-05 10:08:00
vitrualBox+ubuntu16.04安装python3.6最新教程及详细步骤
2021-06-26 05:34:38
Python jieba结巴分词原理及用法解析
2023-08-29 17:43:36
Python设计模式之代理模式实例详解
2022-11-20 05:24:29
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022-05-08 08:38:24
Python中排序函数sorted()函数的使用实例
2021-08-01 09:52:02
python字典key不能是可以是啥类型
2022-12-28 20:54:04
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2022-10-02 03:40:33