Как разбить гетерогенный массив в соответствии с условием в NumPy? - PullRequest
0 голосов
/ 07 апреля 2019

Попытка разбить массив numpy в зависимости от условия.Фильтр должен взять split_column и его split_value и разбить массив на две части, одна из которых содержит подмассив со всеми строками <= split_value в данном split_column. </p>

т.е. задано,

 a = np.array([[5, 'hi', 23],
               [4, 'we', 15],
               [3, 'me', 10],
               [2, 'be', 67],
               [1, 'it', 100]])

split_column = 0
split_value = 3

Ожидаемый результат:

     [[3, 'me', 10],
      [2, 'be', 67],
      [1, 'it', 100]]

Я пробовал это решение a[a[:, split_column] <= split_value], но оно работает, только если все элементы числовые.

Для смешанных типов в массиве numpy (как показано выше) я получаю

TypeError: '<=' не поддерживается между экземплярами 'numpy.ndarray' и 'int'</strong>

Использование str (), как в a[a[:, split_column] <= str(split_value)], не является решением, потому что 10 <= 3 становится истинным, что неверно.Для столбца (1) мне нужно сравнить str, но для других столбцов это должно быть числовое сравнение. </p>

Как мы можем сделать это в numpy, или мы должны перебирать все элементы, проверяющие типы перед сравнением?

1 Ответ

1 голос
/ 07 апреля 2019

Преобразуйте столбцы в нужные type, используя numpy.array.astype:

a[a[:,0].astype(int) <= 3]
array([['3', 'me', '10'],
       ['2', 'be', '67'],
       ['1', 'it', '100']], dtype='<U11')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...