是否可以更改 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])
我想添加以下两个数组:
[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])