我发现了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。我怎么能这样做?
答案 0 :(得分:2)
IIUC,你可以这样做:
>>> 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
。它既简单又快,但两者都有效。)
答案 1 :(得分: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)
然后您可以使用它来替换一个:
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]])