次のコードは、配列の一部に数値を掛けます
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!)
2番目の呼び出しは警告を生成します
-c:2: ComplexWarning: Casting complex values to real discards the imaginary part
問題は、dtypesをいじることなく、numpy配列の一部を複素数/実数で乗算する最もPython的な方法は何ですか?配列を最初から複雑に変換したくはありませんが、プログラムは原則として複雑な入力を取得できます。
編集:
配列全体をコピーして、複雑にキャストすることは気にしません。ただし、dtypes(np.float32、np.float64、np.complex、np.intなど)のチェックは避けたいです。