解决Python报错:ValueError:operands could not be broadcast together with shapes
作者:来知晓 发布时间:2021-05-14 12:04:53
标签:python,valueerror,报错
问题描述
在做矩阵数据的归一化处理时,遇到个报错: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
0
投稿
猜你喜欢
- 学习前言我发现不仅有很多的Keras模型,还有很多的PyTorch模型,还是学学Pytorch吧,我也想了解以下tensor到底是个啥。Py
- 前言因近期进行时间序列分析时遇到了数据预处理中的缺失值处理问题,其中日期缺失和填充在网上没有找到较好较全资料,耗费了我一晚上工作时间,所以下
- 下面就是今天下午的研究成果。发布系统需要响应用户的中断请求,需要在GET方法中杀掉由subprocess派生的子进程,刚开始直接用os.ki
- 一、powershell中 python创建虚拟环境无法激活 二、管理员模式运行powershell,执行策略更改: S
- 在深度学习或者其他类型的GPU运算过程中,对于GPU信息的监测也是一个非常常用的功能。如果仅仅是使用系统级的GPU监测工具,就没办法非常细致
- 看了山人表单验证,又看了其他一些验证程序和相关的一些参考资料,写出了一个比较简洁的js表单验证程序。特点是扩展容易,可以方便的添加自己需要的
- 1 引言在进行图像处理过程中,我们经常会遇到一些和物体轮廓相关的操作,比如求目标轮廓的周长面积等,我们直接使用Opencv的findCont
- 在使用python函数print()时,如下代码会出现输出无法显示的问题:分三次在一行输出 123print(1, end="&q
- 理解 CPU 工作原理,重要的是理解 pc 不停地自增地址,顺序执行程序指令。当遇到跳转指令时,会将 pc 重置为新地址。在顺序执行程序指令
- 类的代码: define('QR_MODE_NUL', -1); define('QR_MODE_NUM',
- 快速排序的基本思想:首先选定一个数组中的一个初始值,将数组中比该值小的放在左边,比该值大的放在右边,然后分别对左边的数组进行如上的操作,对右
- 前提:我训练的是二分类网络,使用语言为pytorchVaribale包含三个属性:data:存储了Tensor,是本体的数据grad:保存了
- 1.二进制读取模式rt 读取文本文件(默认值)rb 读取二进制文件file_name = "C:/Users/cheng/Desk
- Laravel 的上一个 LTS(长期支持)版本是 Laravel 5.1,发布于 2015 年 6 月,按照对 LTS 版本的约定,两年的
- 前言random模块实现了各种分布的伪随机数生成器。伪随机数:人类使用算法等方式,以一个基准(也被称为种子,常用的是时间戳)来构造一系列数字
- 本文实例讲述了python中getaddrinfo()基本用法。分享给大家供大家参考。具体如下:import sys, socketresu
- 阅读上一篇:javascript面向对象编程(一)[javascript模拟传统OOP]javascript是一种非常灵活的语言,它的灵活度
- 看到豆瓣上有网友提了这个问题,看到回答的人不多,忍不住写了下面的内容。工作中最常用到的统计方法有哪些?根据我自己的经验给举些例子。1.通过一
- 本文实例讲述了php利用cookies实现购物车的方法。分享给大家供大家参考。具体分析如下:php购物车是在电子商务网站会用到的,一种像超市
- 首先,了解下原理。1,提供文本框进行查询内容的输入2,将查询信息提交页面程序处理3,程序页主要作用:接受查询信息,根据此信息调用特定的SQL