是否可以更改 np.add() 函数的精度?

Is it possible to change the precision of the np.add() function?

我想添加以下两个数组:

[1.+1.j 2.+2.j 3.+3.j]
[-2.07818374e-10+0.00000000e+00j -1.55863780e-10+2.59772967e-11j
  0.00000000e+00+1.55863780e-10j]

当我使用 add() 函数时,我得到

[1.+1.j 2.+2.j 3.+3.j]

不过,我想得到

[0.9999999997921816+1j 1.9999999998441362+2.0000000000259774j 3+3.0000000001558638j]

如果我自己编写 add 函数,我会得到想要的结果 1.) 初始化一个零数组 2.) 使用 for 循环将相关位置加在一起 ​​3.) 用总和替换零。当然,必须有一种方法可以在不编写新函数的情况下执行此操作吗?这很重要,因为我需要能够为任意大小的数组正确地添加此类总和。

首先将您的 'arrays' 定义为列表,而不是 numpy 数组:

In [335]: alist1 = [1.+1.j, 2.+2.j, 3.+3.j] 
     ...: alist2 = [-2.07818374e-10+0.00000000e+00j, -1.55863780e-10+2.59772967e-11j, 
     ...:   0.00000000e+00+1.55863780e-10j]                                                   
In [336]: alist1                                                                              
Out[336]: [(1+1j), (2+2j), (3+3j)]
In [337]: alist2                                                                              
Out[337]: [(-2.07818374e-10+0j), (-1.5586378e-10+2.59772967e-11j), 1.5586378e-10j]

然后添加列表理解。

In [338]: [i+j for i,j in zip(alist1,alist2)]                                                 
Out[338]: 
[(0.9999999997921816+1j),
 (1.9999999998441362+2.0000000000259774j),
 (3+3.0000000001558638j)]

np.add,列表先变成数组(隐藏):

In [339]: arr = np.add(alist1, alist2)                                                        
In [340]: arr                                                                                 
Out[340]: array([1.+1.j, 2.+2.j, 3.+3.j])

但是当我们将数组转换为列表时,我们得到与理解相同的结果。

In [341]: arr.tolist()                                                                        
Out[341]: 
[(0.9999999997921816+1j),
 (1.9999999998441362+2.0000000000259774j),
 (3+3.0000000001558638j)]

或单独查看一个元素:

In [342]: arr[0]                                                                              
Out[342]: (0.9999999997921816+1j)

[340] 中让您感到困扰的值只是显示值,而不是基础数值。显示值四舍五入。

In [343]: arr.dtype                                                                           
Out[343]: dtype('complex128')

我们可以用 printoptions 更改显示:

In [350]: with np.printoptions(precision=17): print(repr(arr))                                
array([0.9999999997921816+1.j                ,
       1.9999999998441362+2.0000000000259774j,
       3.                +3.0000000001558638j])