我想添加以下两个数组:
[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.)用总和替换零。当然,一定有一种无需编写新函数就能做到这一点的方法吗?这很重要,因为我需要能够为任意大小的数组正确加和。
首先将您的“数组”定义为列表,而不是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])