Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在numpy中将非常低的值设置为零_Python_Numpy - Fatal编程技术网

Python 在numpy中将非常低的值设置为零

Python 在numpy中将非常低的值设置为零,python,numpy,Python,Numpy,在numpy中,我有一个数组 [0 + 0.5j, 0.25 + 1.2352444e-24j, 0.25+ 0j, 2.46519033e-32 + 0j] 将超低值设置为零的最快和最简单的方法是什么 [0 + 0.5j, 0.25 + 0j, 0.25+ 0j, 0 + 0j] 效率不是最重要的。嗯。我对它不太满意,但这似乎有效: >>> a = np.array([0 + 0.5j, 0.25 + 1.2352444e-24j, 0.25+ 0j, 2.46

在numpy中,我有一个数组

[0 +  0.5j, 0.25 + 1.2352444e-24j, 0.25+ 0j, 2.46519033e-32 + 0j] 
将超低值设置为零的最快和最简单的方法是什么

[0 +  0.5j, 0.25 + 0j, 0.25+ 0j, 0 + 0j] 

效率不是最重要的。

嗯。我对它不太满意,但这似乎有效:

>>> a = np.array([0 +  0.5j, 0.25 + 1.2352444e-24j, 0.25+ 0j, 2.46519033e-32 + 0j])
>>> a
array([  0.00000000e+00 +5.00000000e-01j,
         2.50000000e-01 +1.23524440e-24j,
         2.50000000e-01 +0.00000000e+00j,   2.46519033e-32 +0.00000000e+00j])
>>> tol = 1e-16
>>> a.real[abs(a.real) < tol] = 0.0
>>> a.imag[abs(a.imag) < tol] = 0.0
>>> a
array([ 0.00+0.5j,  0.25+0.j ,  0.25+0.j ,  0.00+0.j ])

但这取决于问题。

要将小于eps的元素设置为零:

a[np.abs(a) < eps] = 0
您还可以使用:

通过询问它是否接近于零,它应该起作用:

>>> np.isclose([1e10,0], [1.00001e-10,0])
array([False, True])

您可以自定义
atol
(绝对公差,默认为
1e-08
)和
rtol
(相对公差,默认为
1e-05
)参数。然后,您可以将
rtol=0
设置为仅使用绝对公差。

如果所有数字都有小的虚部,并且您只想抑制这些虚部,则可以使用

b=np.real_if_close(a)
否则,DSM的建议就是前进的方向,即

a.real[abs(a.real)<1e-13]=0
a.imag[abs(a.imag)<1e-13]=0
a.real[abs(a.real)使用数组取整(n)的方法

np.array( [0 +  0.5j, 0.25 + 1.2352444e-24j, 
           0.25+ 0j, 2.46519033e-32 + 0j]  ).round(23)

不过,这将只剩下
0.25+1.23524440e-24j
。@DSM:我添加了一个变体,它可以抑制打印时的小浮动(OPs意图的另一种可能解释)我之所以选择它,是因为它可以处理实数和复数,而且非常简单直观。欢迎使用StackOverflow!不清楚这是如何回答问题的。请添加一些关于您在此处提供的代码以及它如何回答问题的解释。还可以格式化要呈现的代码(使用编辑窗口中的按钮栏)。这是一个很棒的函数!我已经使用numpy多年了,从来都不知道数组有一个
round
函数。
b=np.real_if_close(a)
a.real[abs(a.real)<1e-13]=0
a.imag[abs(a.imag)<1e-13]=0
np.array( [0 +  0.5j, 0.25 + 1.2352444e-24j, 
           0.25+ 0j, 2.46519033e-32 + 0j]  ).round(23)
diff = x-y
diff[diff>1.e-16]

Out[93]:
array([], dtype=float64)

diff[diff>1.e-18]

array([1.73472348e-18, 1.73472348e-18, 1.73472348e-18, 1.73472348e-18,
       1.73472348e-18, 1.73472348e-18, 1.73472348e-18, 1.73472348e-18,
       1.73472348e-18, 1.73472348e-18, 1.73472348e-18, 1.73472348e-18,
       1.73472348e-18, 1.73472348e-18, 1.73472348e-18, 1.73472348e-18,
       1.73472348e-18])