Как извлечь ненулевые значения массива numpy

У меня есть массив numpy, и я хочу извлечь из него некоторые значения. Это мой массив:

arr= array([[0, 0, 23, 28],
            [0, 19, 24, 29],
            [0, 20, 25, 30],
            [17, 21, 26, 31],
            [18, 22, 27, 32]])

Я хочу сначала отсортировать ненулевую часть и изменить ее на:

arr= array([[0, 0, 27, 32],
            [0, 22, 26, 31],
            [0, 21, 25, 30],
            [18, 20, 24, 29],
            [17, 19, 23, 28]])

Затем из первого столбца я хочу извлечь две последние строки (18 и 17). Во втором столбце у меня четыре ненулевые единицы: это означает еще 2 ненулевых строки по сравнению с предыдущим столбцом. Итак, я хочу два верхних ряда. В третьем столбце я вижу пять ненулевых строк, что на одну строку больше, чем во второй строке, поэтому мне нужна одна строка. В последнем столбце разница его ненулевых строк с предыдущим равна нулю, поэтому я не хочу из него ни одной строки. Окончательно. Я хочу, чтобы эти извлеченные числа были в виде списка или массива numpy:

result= [17, 18, 21, 22, 27]

Я пробовал следующее, но это было успешно:

result=[]
for m in range (len (arr[0,:])):
    for i in range (len (arr[:,m])):
        if arr[i,m]==0 and arr[i+1,m]!=0:
            b= arr[i+1:,m]
            result.append (b)

Я ценю любую помощь заранее.

Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
968
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Давай попробуем:

mask = arr != 0

# mask the 0 with infinity and sort
new_arr = np.sort(np.where(mask, arr, np.inf), axis=0)

# replace back:
arr[:] = np.where(mask, new_arr[::-1], 0)

# extract the result
result = arr[np.arange(arr.shape[0]),mask.argmax(axis=1)]

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