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

问题描述 投票:0回答:1

我想添加以下两个数组:

[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.)用总和替换零。当然,一定有一种无需编写新函数就能做到这一点的方法吗?这很重要,因为我需要能够为任意大小的数组正确加和。

python-3.x numpy add
1个回答
0
投票

首先将您的“数组”定义为列表,而不是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])
© www.soinside.com 2019 - 2024. All rights reserved.