【解决报错&原因分析】画图plt.contourf(X,Y,Z)报错TypeError: unhashable type: ‘numpy.ndarray‘(含详细示例讲解)

这篇具有很好参考价值的文章主要介绍了【解决报错&原因分析】画图plt.contourf(X,Y,Z)报错TypeError: unhashable type: ‘numpy.ndarray‘(含详细示例讲解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天简化画图代码的时候发现了很奇怪的报错现象,经过一系列尝试找到了根源,希望帮助后来人,主要问题出现在如下语句中(为了体现问题、方便比对,特意在这改变了x为xx,如果你不想看这冗长的示例,可以直接按照下文红字的方法修改

import numpy as np
import matplotlib.pyplot as plt
#===========做等值线图===========
y = x = np.arange(10)
xx = [str(i) for i in x]#将x中的元素转化为字符串类型
X,Y = np.meshgrid(xx,y)
Z = np.sin(x)[:, np.newaxis] * np.cos(y)[np.newaxis, :]
plt.contourf(X,Y,Z)
#===========报错信息==============
'''
Traceback (most recent call last):

  Input In [63] in <cell line: 1>
    plt.contourf(X,Y,Z)

  ...

TypeError: unhashable type: 'numpy.ndarray'
'''
#X、Y、Z的输出形式
'''
X
Out[90]: 
array([['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
       ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
       ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
       ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
       ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
       ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
       ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
       ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
       ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
       ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']], dtype='<U1')

Y
Out[91]: 
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
       [4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
       [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
       [6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
       [7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
       [8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
       [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]])

Z
Out[92]: 
array([[ 0.        ,  0.        , -0.        , -0.        , -0.        ,
         0.        ,  0.        ,  0.        , -0.        , -0.        ],
       [ 0.84147098,  0.45464871, -0.35017549, -0.83304996, -0.55002214,
         0.2386935 ,  0.80795544,  0.63438687, -0.12243406, -0.76668968],
       [ 0.90929743,  0.4912955 , -0.37840125, -0.90019763, -0.59435646,
         0.2579333 ,  0.87308037,  0.68552138, -0.13230281, -0.8284884 ],
       [ 0.14112001,  0.07624747, -0.05872664, -0.13970775, -0.09224219,
         0.04003041,  0.13549924,  0.10639069, -0.02053297, -0.12857871],
       [-0.7568025 , -0.40890213,  0.31494096,  0.74922879,  0.49467912,
        -0.21467625, -0.72665927, -0.57055511,  0.11011479,  0.68954566],
       [-0.95892427, -0.518109  ,  0.3990533 ,  0.94932784,  0.62679474,
        -0.27201056, -0.9207306 , -0.72293517,  0.13952351,  0.87370493],
       [-0.2794155 , -0.15096884,  0.11627788,  0.27661925,  0.18263816,
        -0.07925961, -0.26828646, -0.21065197,  0.04065496,  0.25458392],
       [ 0.6569866 ,  0.35497137, -0.27340289, -0.6504118 , -0.4294351 ,
         0.18636225,  0.63081901,  0.49530368, -0.09559157, -0.59860037],
       [ 0.98935825,  0.53455254, -0.4117183 , -0.97945724, -0.64668771,
         0.28064352,  0.94995239,  0.74587941, -0.14395166, -0.90143424],
       [ 0.41211849,  0.22266857, -0.1715018 , -0.40799421, -0.26937862,
         0.11690243,  0.39570392,  0.31069706, -0.05996325, -0.37549362]])
'''

经过多次尝试,发现这是由于X和Y中含有'string'(字符)类型的元素导致的,只需更改为'int'或'float'(数字),就能防止报错,并不需要改变X和Y的类型,他们可以依然是'numpy.ndarray'。

更改示例如下,

y = x = np.arange(10)
X,Y = np.meshgrid(x,y)
Z = np.sin(x)[:, np.newaxis] * np.cos(y)[np.newaxis, :]
plt.contourf(X,Y,Z)
plt.show()
'''
X
Out[85]: 
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

Y
Out[86]: 
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
       [4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
       [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
       [6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
       [7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
       [8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
       [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]])

Z
Out[87]: 
array([[ 0.        ,  0.        , -0.        , -0.        , -0.        ,
         0.        ,  0.        ,  0.        , -0.        , -0.        ],
       [ 0.84147098,  0.45464871, -0.35017549, -0.83304996, -0.55002214,
         0.2386935 ,  0.80795544,  0.63438687, -0.12243406, -0.76668968],
       [ 0.90929743,  0.4912955 , -0.37840125, -0.90019763, -0.59435646,
         0.2579333 ,  0.87308037,  0.68552138, -0.13230281, -0.8284884 ],
       [ 0.14112001,  0.07624747, -0.05872664, -0.13970775, -0.09224219,
         0.04003041,  0.13549924,  0.10639069, -0.02053297, -0.12857871],
       [-0.7568025 , -0.40890213,  0.31494096,  0.74922879,  0.49467912,
        -0.21467625, -0.72665927, -0.57055511,  0.11011479,  0.68954566],
       [-0.95892427, -0.518109  ,  0.3990533 ,  0.94932784,  0.62679474,
        -0.27201056, -0.9207306 , -0.72293517,  0.13952351,  0.87370493],
       [-0.2794155 , -0.15096884,  0.11627788,  0.27661925,  0.18263816,
        -0.07925961, -0.26828646, -0.21065197,  0.04065496,  0.25458392],
       [ 0.6569866 ,  0.35497137, -0.27340289, -0.6504118 , -0.4294351 ,
         0.18636225,  0.63081901,  0.49530368, -0.09559157, -0.59860037],
       [ 0.98935825,  0.53455254, -0.4117183 , -0.97945724, -0.64668771,
         0.28064352,  0.94995239,  0.74587941, -0.14395166, -0.90143424],
       [ 0.41211849,  0.22266857, -0.1715018 , -0.40799421, -0.26937862,
         0.11690243,  0.39570392,  0.31069706, -0.05996325, -0.37549362]])
'''

输出等值线图成功了:

unhashable type numpy.ndarray,numpy,python,矩阵 

显而易见地,两种写法并没有改变X和Y的numpy.adarray类型,只是做了列表元素类型上的修改。

###如有疑问 欢迎留言###文章来源地址https://www.toymoban.com/news/detail-583643.html

到了这里,关于【解决报错&原因分析】画图plt.contourf(X,Y,Z)报错TypeError: unhashable type: ‘numpy.ndarray‘(含详细示例讲解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Node.js相关问题】npm install报错后重装node版本及npm环境变量配置及npm run dev启动报错原因分析解决办法

    【Node.js相关问题】npm install报错后重装node版本及npm环境变量配置及npm run dev启动报错原因分析解决办法

    昨天在准备打开b站up主三更草堂的博客项目08-02.基础版本前端联调_哔哩哔哩_bilibili中的前端工程时,使用以下两个命令分别都出现了报错。 命令1 : # install dependencies npm install 命令2 : # serve with hot reload at localhost:8080 npm run dev 2.1 首先是淘宝镜像过期的问题,这个解决办法比

    2024年04月10日
    浏览(35)
  • nvidia-smi报错(已解决):NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver 原因分析

    nvidia-smi报错(已解决):NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver 原因分析

    基本是follow下面教程修复的 nvidia-smi报错:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver 原因及避坑解决方案_打拳的土豆的博客-CSDN博客 1 背景分析: 可能是由于断电重启造成的 当再次跑实验时,发现cuda不可用,于是输入“nvidia-smi”才发现了一个错误,如下:

    2024年02月09日
    浏览(26)
  • vue项目页面空白但不报错产生的原因分析

    为了避免这种情况我们可以在新页面写一些文字等进行页面展示 如果配置两个路由是重复的,比如配置了两个path:\\\'/user\\\' ,那么访问就会看到空白页面,这时候删除一个重复的配置路由即可 把app.js看成是顶级的路由,再次创建的路由是属于二级路由 路由导航守卫中,next()相当

    2024年02月11日
    浏览(10)
  • 会话结束原因:tcp-rst-from-server 常见原因分析和解决办法

    TCP RST(重置)包通常由服务器端发出,TCP RST包通常是用于在连接出现异常或需要立即终止连接的情况下,所以它的作用是立即终止TCP连接。意味着服务器不再愿意或不能够继续与客户端通信,并且双方的连接被立即关闭。 在TCP的设计中TCP RST是不可或缺的,发送RST包关闭连接

    2024年02月02日
    浏览(21)
  • 路由器PPPOE拨号失败原因分析及解决

    以前买的路由器产品,路由器产品是TP-LINK WR840N,但是现在买回来后自己不会设置,来是连接不上网络,老是出现路由器PPPOE拨号失败,不知道是什么原因了。 但是直接用猫连接电脑就没问题,一接上路由器就拨号失败,开始我以为是路由器有问题,所以又去换了一台同型号

    2024年02月06日
    浏览(17)
  • 无线网卡上不了网掉线的原因分析解决方法

    经常听到网友抱怨无线网卡上不了网掉线,这是一种很常见的故障,首先,我们要从网卡驱动问题找起,排除驱动问题后就应该考虑软件设置方面的问题了,下面详细阐述一下解决方法,希望对大家有用。 (1)电脑搜不到路由器无法联网 故障现象: Win7系统,猫和无线路由器的

    2024年02月06日
    浏览(12)
  • Vivado 工程长时间编译的原因分析与解决方案

    Vivado 工程长时间编译的原因分析与解决方案 在进行 FPGA 开发过程中,Vivado 是一款常用的综合工具,但是随着项目的复杂度和规模增大,编译时间也会变得越来越长。本文将对 Vivado 工程编译时间过长的原因进行总结,并提供相应的解决方案,旨在帮助工程师提高 FPGA 开发的

    2024年02月03日
    浏览(138)
  • 首次设置贝尔金无线路由出错原因分析与解决方法

      一、检查线路、拓扑连接和面板灯 先用一台电脑拨号上网,如果行,可以排除线路故障。之后只将一台电脑接到无线路由器,路由器接MODEM,检查无线路由器电源接口、广域网端口和局域网端口连接情况和对应的面板灯,在物理连接正常时,面板的电源灯、Internet灯和已用

    2024年02月05日
    浏览(26)
  • 路由器广域网地址无法获取原因分析及解决

    出现 路由器广域网地址 无法获取,即路由器页面上一直显示连接状态,IP地址无法的登录,导致无法正常上网。出现这种情况该如何解决呢?下面小编分享的是 路由器广域网地址无法获取 的解决方法。 首先你需要检查网吧路由器的WAN口指示灯是否已经亮起,如果WAN口指示灯

    2024年02月05日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包