Как разбить гетерогенный массив в соответствии с условием в numpy?

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

т. е. данный,

 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»

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

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

a.dtype это строка, верно? Список был смешанным, но не массив. Распечатать a
hpaulj 07.04.2019 09:18
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
282
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

a[a[:,0].astype(int) <= 3]
array([['3', 'me', '10'],
       ['2', 'be', '67'],
       ['1', 'it', '100']], dtype='<U11')

Другие вопросы по теме