python - 是否有设置 numpy.linspace 精度的参数?
问题描述
我正在尝试检查numpy
数组是否包含特定值:
>>> x = np.linspace(-5,5,101)
>>> x
array([-5. , -4.9, -4.8, -4.7, -4.6, -4.5, -4.4, -4.3, -4.2, -4.1, -4. ,
-3.9, -3.8, -3.7, -3.6, -3.5, -3.4, -3.3, -3.2, -3.1, -3. , -2.9,
-2.8, -2.7, -2.6, -2.5, -2.4, -2.3, -2.2, -2.1, -2. , -1.9, -1.8,
-1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1, -1. , -0.9, -0.8, -0.7,
-0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0. , 0.1, 0.2, 0.3, 0.4,
0.5, 0.6, 0.7, 0.8, 0.9, 1. , 1.1, 1.2, 1.3, 1.4, 1.5,
1.6, 1.7, 1.8, 1.9, 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6,
2.7, 2.8, 2.9, 3. , 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7,
3.8, 3.9, 4. , 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8,
4.9, 5. ])
>>> -5. in x
True
>>> a = 0.2
>>> a
0.2
>>> a in x
False
我为变量分配了一个常量a
。似乎 的精度与生成的数组a
中的元素不兼容。numpy
np.linspace()
我搜索了文档,但没有找到任何关于此的内容。
解决方案
这不是精度问题np.linspace
,而是生成数组中元素类型的问题。
np.linspace
生成元素,从概念上讲,它们之间的输入范围相等。然而,这些元素随后被存储为精度有限的浮点数,这使得生成过程本身似乎缺乏精度。
通过将dtype
参数传递给np.linspace
,您可以指定用于存储其结果的浮点类型的精度,这可以提高生成过程的表观精度。
不过,您不应该使用等式运算符来比较浮点数。相反,np.isclose
与np.ndarray.any
或其他等效项一起使用:
>>> floats_64 = np.linspace(-5, 5, 101, dtype='float64')
>>> floats_128 = np.linspace(-5, 5, 101, dtype='float128')
>>> print(0.2 in floats_64)
False
>>> print(floats_64[52])
0.20000000000000018
>>> print(np.isclose(0.2, floats_64).any()) # check if any element in floats_64 is close to 0.2
True
>>> print(0.2 in floats_128)
False
>>> print(floats_128[52])
0.20000000000000017764
>>> print(np.isclose(0.2, floats_128).any()) # check if any element in floats_128 is close to 0.2
True
推荐阅读
- python - 在哪里可以找到 Python 源代码分发中的示例,例如 Modules/xxmodule.c?
- docker - 'll' 不是内部或外部命令、可运行程序或批处理文件
- reactjs - 对象作为 React 子级无效 - firebase 数据库,axios
- delphi - WebBrowser WndProc 中未收到 WM_LBUTTONUP
- c# - 2d 射击鼠标跟随问题。统一二维
- python - psutil.AccessDenied:psutil.AccessDenied (pid=7868)
- reactjs - 制表符在行单击时执行不需要的滚动
- javascript - 路径交叉导致部分消失【D3路径生成】
- javascript - 如何返回正确的 JavaScript 提取错误
- python - 如何在 PySpark 中按行将 spark df(大 df)拆分为多个 dfs?