Numpy объединяет два MaskedArrays с операцией ИЛИ - PullRequest
0 голосов
/ 07 января 2019

У меня есть два объекта 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)

Но никто из них не добивается цели

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Преобразование массивов в списки и создание словарей со значениями индекса (это предполагает, что два массива не будут иметь значения в одной позиции индекса). Затем вы можете объединить их и вывести результат в виде маскированного массива или списка:

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)
0 голосов
/ 07 января 2019

Следующие работы работают до тех пор, пока не перекрываются две маски:

grades = grades_passed.filled(1) * grades_not_passed.filled(1)

Параметр 1 временно устанавливает fill_value двух переменных, поэтому маскированные значения принимают 1 в качестве значения для заполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...