Python错题集-7:DeprecationWarning: Conversion of an array with ndim(被弃用警告)

这篇具有很好参考价值的文章主要介绍了Python错题集-7:DeprecationWarning: Conversion of an array with ndim(被弃用警告)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1问题描述

DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)
  X[i] = np.random.normal(loc=Ex, scale=np.abs(Enn), size=1)

deprecationwarning: conversion of an array with ndim > 0 to a scalar is depr,Python错题集,python,开发语言,matplotlib,学习,笔记

2代码详情 

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

def plot_cloud_model(Ex, En, He, n, ax, label='', color = 'r',marker = 'o'):
    '''
    Ex 期望
    En 熵
    He 超熵
    n 云滴数量
    
    '''
     
    Y = np.zeros((1, n))
    np.random.seed(int(np.random.random()*100))
    X= np.random.normal(loc=En, scale=He, size=n)
    Y = Y[0]
    for i in range(n):
        np.random.seed(int(np.random.random()*100) + i + 1)
        Enn = X[i]
        X[i] = np.random.normal(loc=Ex, scale=np.abs(Enn), size=1)
        Y[i] = np.exp(-(X[i] - Ex) * (X[i] - Ex) / (2 * Enn * Enn))
    ax.scatter(X, Y, s=10, alpha=0.5, c=color, marker=marker, label=label)

fig = plt.figure(len(plt.get_fignums()))
ax = fig.add_subplot(111) #创建画布
title = '准确性(R)'
ax.set_title(title)#在ax指向的画布上绘图
ax.set_xlabel('期望')
ax.set_ylabel('隶属度')
#调用函数
plot_cloud_model(70.58, 5.7374, 8.4585, 5000, ax,'云','black','*')

ax.legend(loc='best')
plt.show()

3问题剖析

DeprecationWarning: Conversion of an array with ndim 是一个警告,通常出现在你使用某个库或函数时,而该库或函数在将来的版本中可能会改变其对于多维数组(ndim)的处理方式。这通常意味着你正在使用一个即将被弃用(deprecated)的特性或方法。

本代码中,这个警告信息表明,你正在尝试将一个多维数组(ndim > 0)转换为一个标量(scalar),这在NumPy 1.25及以后的版本中已经被弃用。具体来说,问题出在这一行:

X[i] = np.random.normal(loc=Ex, scale=np.abs(Enn), size=1)

这里,np.random.normal 返回一个一维数组,即size=1。因此,当尝试将这个一维数组赋值给 X[i] 时,NumPy 发出警告,因为 X[i] 期望的是一个标量值。 

4问题解决

  1. 查看警告的详细信息:通常,警告会提供更多的信息,告诉你哪个函数或方法正在被弃用,以及建议使用什么替代方案。
  2. 更新代码:根据警告的建议,更新你的代码以使用新的函数或方法。这通常涉及到查找你正在使用的库或函数的文档,并查找推荐的替代方案。
  3. 更新库:确保你正在使用的库是最新版本的。有时,库的新版本会包含对弃用特性的修复或替代方案。
  4. 考虑兼容性:如果你正在编写需要兼容不同版本库的代码,你可能需要编写一些条件代码来处理不同版本的库。
  5. 查阅文档和社区:如果你不确定如何处理这个警告,查阅相关库的文档或参与社区讨论。

 本代码中:为了解决这个问题,可以直接从 np.random.normal 返回的数组中提取标量值。由于设置了 size=1,返回的数组将只包含一个元素,所以你可以安全地使用索引来提取这个元素。修改后的代码应该是这样的:

X[i] = np.random.normal(loc=Ex, scale=np.abs(Enn), size=1)[0]

另外,考虑到 np.random.normal 在 size=1 时实际上返回的是一个0维数组(标量),你也可以简化代码,直接赋值而不需要索引: 

X[i] = np.random.normal(loc=Ex, scale=np.abs(Enn))

这样写的话,NumPy 会自动将返回的0维数组转换为标量,而不会产生弃用警告。

5修改后全文代码

5.1方法一代码:

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

def plot_cloud_model(Ex, En, He, n, ax, label='', color = 'r',marker = 'o'):
    '''
    Ex 期望
    En 熵
    He 超熵
    n 云滴数量
    
    '''
     
    Y = np.zeros((1, n))
    np.random.seed(int(np.random.random()*100))
    X= np.random.normal(loc=En, scale=He, size=n)
    Y = Y[0]
    for i in range(n):
        np.random.seed(int(np.random.random()*100) + i + 1)
        Enn = X[i]
        X[i] = np.random.normal(loc=Ex, scale=np.abs(Enn), size=1)[0]
        Y[i] = np.exp(-(X[i] - Ex) * (X[i] - Ex) / (2 * Enn * Enn))
    ax.scatter(X, Y, s=10, alpha=0.5, c=color, marker=marker, label=label)

fig = plt.figure(len(plt.get_fignums()))
ax = fig.add_subplot(111) #创建画布
title = '准确性(R)'
ax.set_title(title)#在ax指向的画布上绘图
ax.set_xlabel('期望')
ax.set_ylabel('隶属度')
#调用函数
plot_cloud_model(70.58, 5.7374, 8.4585, 5000, ax,'云','black','*')

ax.legend(loc='best')
plt.show()

5.2方法二代码:

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

def plot_cloud_model(Ex, En, He, n, ax, label='', color = 'r',marker = 'o'):
    '''
    Ex 期望
    En 熵
    He 超熵
    n 云滴数量
    
    '''
     
    Y = np.zeros((1, n))
    np.random.seed(int(np.random.random()*100))
    X= np.random.normal(loc=En, scale=He, size=n)
    Y = Y[0]
    for i in range(n):
        np.random.seed(int(np.random.random()*100) + i + 1)
        Enn = X[i]
        X[i] = np.random.normal(loc=Ex, scale=np.abs(Enn))
        Y[i] = np.exp(-(X[i] - Ex) * (X[i] - Ex) / (2 * Enn * Enn))
    ax.scatter(X, Y, s=10, alpha=0.5, c=color, marker=marker, label=label)

fig = plt.figure(len(plt.get_fignums()))
ax = fig.add_subplot(111) #创建画布
title = '准确性(R)'
ax.set_title(title)#在ax指向的画布上绘图
ax.set_xlabel('期望')
ax.set_ylabel('隶属度')
#调用函数
plot_cloud_model(70.58, 5.7374, 8.4585, 5000, ax,'云','black','*')

ax.legend(loc='best')
plt.show()

正常运行后的绘图: 

deprecationwarning: conversion of an array with ndim > 0 to a scalar is depr,Python错题集,python,开发语言,matplotlib,学习,笔记文章来源地址https://www.toymoban.com/news/detail-845513.html

到了这里,关于Python错题集-7:DeprecationWarning: Conversion of an array with ndim(被弃用警告)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 成功解决Unable to allocate xxx MiB for an array with shape (xxxx, xxxx)

    看了网上的一些解决方案,应该是跟内存有关。 1.修改 pycharm 的运行内存(未解决) 打开pycharm64.exe.vmoptions进行编辑修改,把 -Xmx750m改为 -Xmx8192m,分配8G内存,内存分配视情况而定。保存并重启pycharm。 2.修改虚拟内存(解决) 视情况设置需要的虚拟内存。

    2024年02月12日
    浏览(76)
  • 问题:module was compiled with an incompatible version of kotlin

    不同模块使用不一致的kotlin版本编译,导致最后merge的时候版本冲突出错了 临时解决 build-rebuild project 永久解决 项目不使用kotlin,关闭插件kotlin enable-disable

    2024年02月12日
    浏览(41)
  • 【论文阅读】An Evaluation of Concurrency Control with One Thousand Cores

    Staring into the Abyss: An Evaluation of Concurrency Control with One Thousand Cores 随着多核处理器的发展,一个芯片可能有几十乃至上百个core。在数百个线程并行运行的情况下,协调对数据的竞争访问的复杂性可能会减少增加的核心数所带来的收益。探索当前DBMS的设计对于未来超多核数的

    2024年02月08日
    浏览(37)
  • Kotlin: Module was compiled with an incompatible version of Kotlin

    背景: 使用intellij-idea工具,spring boot项目,使用的maven 问题: 项目中没有依赖Kotlin,结果报错Kotlin版本问题,如下 Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.1.15. 解决方案: Just go to the Build menu and click on the rebuild

    2024年02月06日
    浏览(50)
  • 深度学习解决Unable to allocate 33.6 GiB for an array with shape (60000, 224, 224, 3) and data type float32

    深度学习时,常常要处理超大文件。因此,常常引起电脑故障。当电脑的内存16G,虚拟内存16G,读入34G的数组,发生错误:Unable to allocate 33.6 GiB for an array with shape (60000, 224, 224, 3) and data type float32。解决办法: 在win10设置-查找-高级设置-性能选项-虚拟内存-选自定义大小-按C盘

    2024年02月12日
    浏览(51)
  • Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of

    问题原因 idea 中的 kotlin 插件版本比 pom 中的低,导致无法启动 解决方式 把项目 pom 中的版本降低 或 升级下idea插件的版本 实际解决 pom 中的一般我们没有办法轻易改动,这里选择升级idea 中的插件,共两种方式 第一种(推荐) : 通过左上角菜单进入 settings 或者 直接快捷键

    2024年02月07日
    浏览(47)
  • Error:Kotlin: Module was compiled with an incompatible version of Kotlin. 处理

    启动项目时报错 Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.1.16. 原因是项目的Kotlin版本和idea的不匹配。解决:将idea的Kotlin版本升级,升级完需要重启idea

    2024年02月16日
    浏览(49)
  • 解决Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of ..

    今天在启动项目时,项目启动不起来,报错: Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.13. 如下图所示: 经过分析,发现是ideade Kotlin版本过低导致,有两种解决方式:     一是将项目中的 Kotlin 版本降低;

    2024年01月18日
    浏览(58)
  • Class ‘com.xxxx.Log‘ was compiled with an incompatible version of Kotlin.

    Class \\\'com.xxxx.Log\\\' was compiled with an incompatible version of Kotlin.  The binary version of its metadata is 1.7.1, expected version is 1.5.1. 原因:在build.gradle中使用了1.5.30版本的kotlin插件,与第三方库中的kotlin插件版本不同,需要进行升级。 需要将: 改为:

    2024年02月11日
    浏览(39)
  • 记录一下Kotlin: Module was compiled with an incompatible version of Kotlin.的问题

    我遇到的整个报错是这样的: Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.1.16. 大概意思就是不匹配,但是我这是个不太能随便改代码的项目,而且我是突然出现的这个问题,原本是可以正常启动的,所以我就找只

    2024年02月15日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包