返回顶部
首页 > 资讯 > 后端开发 > Python >Python报错:ValueError: operands could not be broadcast together with shapes
  • 164
分享到

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

pythonnumpy 2023-08-31 07:08:40 164人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

python报错:ValueError: operands could not be broadcast together with shapes 问题描述问题解决进阶举例参考资料 问

python报错:ValueError: operands could not be broadcast together with shapes

问题描述


在做矩阵数据的归一化处理时,遇到个报错: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_normX = 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 npx1 = [1, 2]  # 一维向量,没有行列之分,只有元素个数x2 = [[1], [2]] # 二维矩阵,大小为:2*1x3 = [[1, 2], [3, 4]] # 二维矩阵,大小为:2*2x1 = np.array(x1)x2 = np.array(x2)x3 = np.array(x3)print(x1.shape)print(x2.shape)print(x3.shape)

参考资料


  1. How to Fix: ValueError: Operands could not be broadcast together with shapes?

来源地址:https://blog.csdn.net/qq_17256689/article/details/127911882

--结束END--

本文标题: Python报错:ValueError: operands could not be broadcast together with shapes

本文链接: https://lsjlt.com/news/384709.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作