python - 将 numpy 数组与 np.allclose() 进行比较
问题描述
我是 Python 新手。我无法理解以下代码的行为(我正在尝试为某些东西创建单元测试):
import numpy as np
input = np.array([0, 2])
result = 1 / (1 + np.exp(-input))
expected_result = np.array([0.5, 0.88079708])
print(result)
print(expected_result)
print(result[1])
print(expected_result[1])
is_equal1 = np.array_equal(result, expected_result)
is_equal2 = np.allclose(result, expected_result, rtol=0.00000000000000000000001)
print(is_equal1)
print(is_equal2)
此代码打印:
[0.5 0.88079708]
[0.5 0.88079708]
0.8807970779778823
0.88079708
False
True
为什么当我打印数组时它们的值是相等的,但是我打印它们的最后一项它们是不同的?如果值实际上不同,为什么is_equal2
是True
?如果值相同,为什么is_equal1
是False
?
解决方案
“为什么当我打印数组时它们的值是相等的,但是我打印它们的最后一项它们是不同的?”
这是因为在打印中numpy.ndarray
具有预设的显示精度。
“如果值实际上不同,为什么 is_equal2 为 True?”
根据numpy.allclose的文档,它按元素进行比较:
绝对(a - b)<=(atol + rtol * 绝对(b))
atol 默认为 1e-8,因此您需要在atol
此处提供参数而不是rtol
.
推荐阅读
- python - 如何使用在 keras 训练期间发生变化的函数
- multithreading - Windows 多核程序以前可以工作,但突然线程随机执行
- c++ - C++:如何从二进制文件中读取特定数量的字节并将其保存到 uint16_t?
- php - 会话成员和其他成员 ID 未发送到我的 MySQL 查询。私信系统
- vb.net - 如何将两个字节转换为浮点数
- javascript - 将弹出窗口添加到谷歌地图标记
- python-3.x - 在 anytree 节点中访问 **kwargs
- java - 如何访问数组并将数据分配给Java中的每个对象?
- python - 我的 python 3.x 程序中出现 TypeError,但我不知道如何更改它
- android - 没有这样的列:_id(代码 1):,编译时:SELECT _id、姓名、年龄、性别、薪水、来自教师的科目