以下代码将数组的一部分乘以数字
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!)
Run Code Online (Sandbox Code Playgroud)
第二个调用会生成警告
-c:2: ComplexWarning: Casting complex values to real discards the imaginary part
Run Code Online (Sandbox Code Playgroud)
问题是,在没有混淆dtypes的情况下,通过复数/实数乘以numpy数组的部分的最pythonic方法是什么?我真的不想从一开始就将数组转换为复数,但原则上该程序可以获得复杂的输入.
编辑:
我不关心复制整个阵列,把它复制到复杂的阵列; 但我想避免检查dtypes(即np.float32,np.float64,np.complex,np.int等)
你需要在某些时候将数组转换为复数,否则它将无法容纳复数.
将数组转换为complex的最简单方法是添加0j:
if (np.iscomplexobj(b)):
a = a + 0j
a[0:2] *= b
Run Code Online (Sandbox Code Playgroud)
注意:并不是 a += 0j因为它会尝试修改数组inplace,如果它已经很复杂,它将无法工作.