我有两个MaskedArray对象,它们的长度相同:
>> grades_passed
[90 -- 88 62 -- 100]
>> grades_not_passed
[-- 54 -- -- 34 --]
我正在尝试将它们结合起来以得到:
[90 54 88 62 34 100]
我尝试了一些操作,例如:
total_final = grades_passed + grades_not_passed
或
total_final = ma.mask_or(grades_passed, grades_not_passed)
total_final = ma.concatenate(grades_passed, grades_not_passed)
但没有一个能解决问题
答案 0 :(得分:2)
只要两个遮罩没有重叠,以下操作即可:
grades = grades_passed.filled(1) * grades_not_passed.filled(1)
参数1
临时设置了两个变量的fill_value
,因此掩码值采用1
作为要填充的值。
答案 1 :(得分:0)
将数组转换为列表,并创建带有索引值的字典(这假设两个数组在相同的索引位置将没有值)。然后,您可以将它们组合起来并以掩码数组或列表的形式输出结果:
def combine_grades(passed, failed):
# Put index:value for each list into a dictionary
pass_dict = {list(passed).index(i):i for i in list(passed) if i != '--'}
fail_dict = {list(failed).index(i):i for i in list(failed) if i != '--'}
# Combine those dictionaries
full_dict = {**pass_dict, **fail_dict}
# Return a masked array (if that's what you want. Otherwise, just return the list)
return ma.array([full_dict[i] for i in sorted(full_dict)])
然后致电:
combine_grades(grades_passed, grades_not_passed)
输出:
masked_array(data=[ 90, 54, 88, 62, 34, 100],
mask=False,
fill_value=999999)