Numpy数组,花式索引,复数

时间:2012-08-15 06:52:38

标签: python numpy

以下代码将数组的一部分乘以数字

def mul_by_num(a,b):
    a[0:2] *= b


import numpy as np
a = np.ones(5,dtype=np.float64)
mul_by_num(a,1.0)
mul_by_num(a,1j) #Generates a warning (and casts to float!)

第二个电话会产生警告

-c:2: ComplexWarning: Casting complex values to real discards the imaginary part

问题是,在没有混淆dtypes的情况下,通过复数/实数乘以部分numpy数组的最pythonic方法是什么?我真的不想从一开始就将数组转换为复数,但原则上该程序可以获得复杂的输入。

修改

我不关心复制完整的数组,把它变成复杂的;但我想避免检查dtypes(即np.float32,np.float64,np.complex,np.int等)

2 个答案:

答案 0 :(得分:5)

你需要在某些时候将数组转换为复数,否则它将无法容纳复数。

将数组转换为复数的最简单方法是添加0j

if (np.iscomplexobj(b)):
    a = a + 0j
a[0:2] *= b

注意:不是 a += 0j,因为它会尝试在地方修改数组,如果它已经很复杂就不会有效。

答案 1 :(得分:0)

由于提高计算速度,numpy数组确保具有相同的类型。也许你可以尝试python列表或者投射它。