首页 > 编程问答 >如何阻止 numpy 浮点数显示为“np.float64”?

如何阻止 numpy 浮点数显示为“np.float64”?

时间:2024-07-25 14:49:04浏览次数:8  
标签:python numpy doctest numpy-2.x

我有一个很大的图书馆,里面有很多文档测试。所有文档测试都在我的计算机上通过。当我将更改推送到 GitHub 时,GitHub Actions 在 Python 3.8、3.9、3.10 和 3.11 中运行相同的测试。所有测试均正确运行 在 Python 3.8 上;但是,在 Python 3.9、3.10 和 3.11 上,我收到许多以下类型的错误:

Expected:
    [13.0, 12.0, 7.0]
Got:
    [np.float64(13.0), np.float64(12.0), np.float64(7.0)]

即,结果是正确的,但由于某种原因,它们显示在“np.float64”内。

在我的代码中,我根本不使用np.float64,所以我不知道为什么会发生这种情况。另外,当测试在我的计算机上通过时,我不知道如何调试错误,并且很难生成最小的工作示例。 有没有办法让文档测试再次通过,而无需更改每个单独的测试?


这个错误是因为Python 3.9改变了numpy数组的字符串表示方式,更具体地说,是标量的字符串表示。

你有几个选择来解决这个问题:

1. 使用 numpy.testing.assert_array_equal :

这是推荐的解决方案,因为它直接比较数组的内容,而忽略类型表示的差异。例如:

```python import numpy as np from numpy.testing import assert_array_equal

expected = [13.0, 12.0, 7.0] result = some_function_that_returns_array() assert_array_equal(result, expected) ```

2. 将数组转换为列表 :

在比较之前将结果数组转换为Python列表,这样就绕过了numpy的字符串表示:

python expected = [13.0, 12.0, 7.0] result = some_function_that_returns_array() assert result.tolist() == expected

3. 使用 np.testing.assert_equal :

这个函数会递归地比较数组元素,忽略类型的差异:

```python import numpy as np

expected = [13.0, 12.0, 7.0] result = some_function_that_returns_array() np.testing.assert_equal(result, expected) ```

4. 使用自定义断言函数 :

你可以创建自定义的断言函数,使用 ast.literal_eval 将字符串表示转换为Python对象,然后进行比较:

```python import ast

def assert_array_equal_ignore_dtype(result, expected): result_list = ast.literal_eval(str(result)) assert result_list == expected, f"Expected {expected}, got {result_list}"

expected = [13.0, 12.0, 7.0] result = some_function_that_returns_array() assert_array_equal_ignore_dtype(result, expected) ```

注意 : 使用 ast.literal_eval 要谨慎,因为它可能存在安全风险,如果输入不可信的话。

选择最适合你需求的方案,并将其应用到你的所有doctest中。

标签:python,numpy,doctest,numpy-2.x
From: 78630047

相关文章

  • 关于 Python 中装饰器缓存的困惑
    我正在使用Python装饰器来实现函数的缓存。我了解缓存结果以提高性能的基本概念,但我正在努力解决如何处理不同的函数参数并确保底层数据更改时缓存更新。我已经实现了一个基本装饰器,它将函数结果存储在基于参数的字典。但是,此方法无法处理函数参数可能具有复杂结构(如嵌套列......
  • Python:__add__ 和 +,浮点数和整数的不同行为
    当将整数值添加到浮点值时,我意识到如果在浮点上调用该方法可以正常工作,例如:__add__但如果在整数上调用则不行:>>>n=2.0>>>m=1>>>n.__add__(m)3.0起初我认为|||只是对>>>m.__add__(n)NotImplemented和__add__类型的实现方式不同(例如f......
  • python中scrapy爬取数据get()与getall()区别
    在使用scrapy进行爬取数据的时候,有些时候需要爬取的是一段文本,或者一个div里面有很多内容,这时候我们就要使用到get()或者getall()来获取数据: get():是获取的满足条件的第一个数据。getall():是获取的满足条件的所有数据。scrapyget()getall()原理在Scrapy中,get(......
  • python—NumPy基础(3)
    文章目录算术函数算术函数的使用算术函数中out参数的使用mod()函数的使用统计函数power()函数的使用median()函数的使用mean()函数的使用函数的使用其他常用函数tile()和repeat()函数的使用roll()函数的使用resize()函数的使用replace()和put()函数的使savetxt()和lo......
  • Python爬虫:代理ip电商数据实战
    引言:数据访问管理引发的烦恼作为一名Python博主,爬虫技能对于获取和分析数据至关重要,经常爬一下,有益身心健康嘛。爬虫技术对很多人来说,不仅仅是一种工具,更像是一种艺术,帮助我们从互联网中,捕捉到有价值的信息。我经常就会用爬虫来爬取一些所需的数据,用来进行数据分析和模型训......
  • python科学计算:加速库numba —— 安装和试用
    安装(anaconda环境下)condainstallnumbaDemo代码:fromnumbaimportjitfromnumpyimportarangeimportnumpyimporttime@jitdefsum2d(arr):M,N=arr.shaperesult=0.0foriinrange(M):forjinrange(N):result+=a......
  • Python - Selenium抓取淘宝直播间评论(可使用无头模式)
    Python-Selenium抓取淘宝直播间评论(可使用无头模式)下面介绍如何使用python中的selenium简单抓取淘宝直播间实时评论。友情提醒,仅供学习交流使用,请勿用于非法用途!一、创建python项目1.在目录下新建main.py和venv虚拟环境:创建虚拟环境:python-mvenvvenv激活虚拟环......
  • 需要帮助来提取此 XML 节点 - Python 中的 Excel 连接字符串
    我有一个Python程序,打开Excel(XLSX)文件,并尝试查找<connection>节点。这是connections.xml文件中的完整XML。<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><connectionsxmlns="http://schemas.op......
  • 【python】Python中采集Prometheus数据,进行数据分析和可视化展示
    ✨✨欢迎大家来到景天科技苑✨✨......
  • 使用python3拼接rgb.txt与depth.txt为associate.txt(适用于GCNV2_SLAM中TUM数据集的运
    这里以GCNV2_SLAM中TUM数据集的运行为例子:安装gnv2_slam可以参考:GCNv2_SLAM-CPU详细安装教程(ubuntu18.04)-CSDN博客首先下载数据集ComputerVisionGroup-DatasetDownload下载后通过该命令解压:tar-xvfrgbd_dataset_freiburg1_desk.tgz打开后,你可以发现:在该数据集......