当前位置:主页 > python教程 > Python报错ValueError

解决Python报错:ValueError:operands could not be broadcast together with shapes

发布:2023-04-05 10:35:01 59


给网友们整理相关的编程文章,网友慕子石根据主题投稿了本篇教程内容,涉及到python、valueerror、python报错类型、valueerror是什么错误、Python报错ValueError相关内容,已被464网友关注,相关难点技巧可以阅读下方的电子资料。

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?

总结

到此这篇关于解决Python报错:ValueError:operands could not be broadcast together with shapes的文章就介绍到这了,更多相关Python报错ValueError内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!


参考资料

相关文章

  • 使用python telnetlib批量备份交换机配置的方法

    发布:2022-08-10

    给网友们整理关于python的教程,今天小编就为大家分享一篇使用python telnetlib批量备份交换机配置的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


  • python用fsolve、leastsq对非线性方程组求解方法

    发布:2019-06-05

    这篇文章主要为大家详细介绍了python用fsolve、leastsq对非线性方程组进行求解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • python调用excel_vba的两种实现方式

    发布:2023-04-27

    本文主要介绍了python调用excel_vba的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • 实现Python3数组旋转的3种算法实例

    发布:2021-04-16

    在本篇文章里小编给大家整理的是一篇关于实现Python3数组旋转的3种算法实例内容,需要的朋友们可以学习参考下。


  • python数据分析用什么编译器

    python数据分析用什么编译器

    发布:2022-10-21

    给网友朋友们带来一篇关于python的教程,Jupyter Notebook,(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 0多种编程语言。支持实时代码,数学方程,可视化和markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机


  • Python使用爬虫抓取美女图片的代码详解

    发布:2020-07-24

    这篇文章主要介绍了Python使用爬虫抓取美女图片并保存到本地的方法,涉及Python基于正则、爬虫实现的图片抓取与保存相关操作技巧,需要的朋友可以参考下


  • python利用pickle模块完成增删改查功能

    发布:2020-04-17

    本篇文章主要介绍了python用pickle模块实现“增删改查”的简易功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。


  • Python调用Tkinter示例浅析

    发布:2023-04-02

    这篇文章主要介绍了Python调用Tkinter示例,通过在Python程序中设计按钮,可以方便用户调用Python程序,从而达到快速、自动化、高效的目的,提高用户体验和工作效率


网友讨论