python:如何将复数替换为-1?
我发现了一个叫做 isinstance 的方法,它可以判断一个数字是否是复数。我的数据看起来是这样的。
[[ 2.48983949+0.j 0.51935128+0.j 0.50851186+0.j
0.49747311+0.j 0.48621321+0.j 0.47549854+0.j
0.32583775+0.j 0.32263812+0.j 0.31966799+0.j
0.31415193+0.j 0.31590046+0.j 0.31224772+0.j
0.30953578+0.j ]
[ 2.78263801+0.j 0.47996998+0.j 0.46950057+0.j
0.45938939+0.j 0.44934962+0.j 0.43981685+0.j
0.30778303+0.j 0.30533936+0.j 0.30283312+0.j
0.30045755+0.j 0.29776178+0.j 0.29601522+0.j
0.29394237+0.j ]
[ 0.00000000+0.86404032j 0.44030961+0.j 0.43096323+0.j
0.42117570+0.j 0.41239587+0.j 0.40406585+0.j
0.29059586+0.j 0.28840336+0.j 0.28632998+0.j
0.28435365+0.j 0.28251060+0.j 0.28053645+0.j
0.27894779+0.j ]]
所以这些数据是一个二维的 numpy 数组。
我想把虚数替换成 -1。我该怎么做呢?
2 个回答
1
最好的方法是使用numpy数组。假设你有一个数组:
In [106]: y
Out[106]:
array([[ 1.+0.j, 2.+0.j, 1.+0.j],
[ 1.+0.j, 2.+0.j, 1.+0.j],
[ 2.+3.j, 2.+0.j, 3.+0.j]])
然后,
In [107]: y.imag > 0
Out[107]:
array([[False, False, False],
[False, False, False],
[ True, False, False]], dtype=bool)
你可以用这个来把某些东西替换成1:
In [108]: y[y.imag > 0] = -1
In [109]: y
Out[109]:
array([[ 1.+0.j, 2.+0.j, 1.+0.j],
[ 1.+0.j, 2.+0.j, 1.+0.j],
[-1.+0.j, 2.+0.j, 3.+0.j]])
2
如果我理解正确的话,你可以这样做:
>>> arr = np.array([[1,2+3j,4+5j],[6+7j,8,9],[10+11j,12,13+14j]])
>>> arr
array([[ 1. +0.j, 2. +3.j, 4. +5.j],
[ 6. +7.j, 8. +0.j, 9. +0.j],
[ 10.+11.j, 12. +0.j, 13.+14.j]])
>>> arr[abs(arr.imag) > 0] = -1
>>> arr
array([[ 1.+0.j, -1.+0.j, -1.+0.j],
[ -1.+0.j, 8.+0.j, 9.+0.j],
[ -1.+0.j, 12.+0.j, -1.+0.j]])
然后(因为我们构造的时候所有的虚部都是零),如果需要的话,我们可以只处理实部:
>>> arr.real
array([[ 1., -1., -1.],
[ -1., 8., 9.],
[ -1., 12., -1.]])
(更新:正如Floris所提到的,arr.imag != 0
会比abs(arr.imag) > 0
更好。这两种方法都能用,但前者更简单也更快。)