python:如何将复数替换为-1?

时间:2014-06-26 11:49:31

标签: python numpy

我发现了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 个答案:

答案 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]])