在我真正的问题中,我有数百个数据数组和结果数组,所以我不能手动完成。
import numpy as np
data1 = np.array([1,2,np.nan,4,5,6,7],dtype=float)
data2 = np.array([11,np.nan,9,4,5,6,71],dtype=float)
data3 = np.array([17,np.nan,13,4,15,6,17],dtype=float)
my_groups = ['result1', 'result2', 'result3']
result1 = data1/data2
result2 = data1/data3
result3 = data3/data2
对于每个结果,我想将np.nan值转换为-9.0: 最长的写作方式是:
result1 = np.where(np.isnan(result1),-9.0,result1)
result2 = np.where(np.isnan(result2),-9.0,result2)
result3 = np.where(np.isnan(result3),-9.0,result3)
但是,我想缩短脚本。这样做的好方法是什么?
for i in my_groups:
out[i] = np.where(np.isnan(i),-9.0,i)
当然我的代码错了。等待你的想法。
答案 0 :(得分:2)
只需在任何阵列上使用掩码X
:
X[np.isnan(X)] = -9.0
这正是numpy在类似函数nan_to_num
中所做的,它用零替换nan和有限数字inf。如果你的数据"数组大小都相同,只需使用2D数组就可以一举完成。例如:
import numpy as np
data = np.array([[1,2,np.nan,4,5,6,7],
[11,np.nan,9,4,5,6,71],
[17,np.nan,13,4,15,6,17]])
result = np.array([data[0]/data[1],
data[0]/data[2],
data[2]/data[1]])
result[np.isnan(result)] = -9
print result
>> [[ 0.09090909 -9. -9. 1. 1. 1. 0.09859155]
[ 0.05882353 -9. -9. 1. 0.33333333 1. 0.41176471]
[ 1.54545455 -9. 1.44444444 1. 3. 1. 0.23943662]]