Перестановка строк матрицы в соответствии с характеристикой

Дана целочисленная прямоугольная матрица. Определить кол-во столбцов, не содержащих ни одного нулевого элемента (оформить в виде функции). - сделано
Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик (оформить в виде процедуры).

Я создаю отдельный массив xar, в котором находятся характеристики каждой строки. Подскажите пожалуйста, каким образом закончить мой способ, для перестановки строк. Либо же прошу подсказать альтернативный способ решения данной задачи.
Мой код:

#lab5_var2
import numpy as np
sz = (4, 5)
ar = np.random.randint(-5, 10, size = sz)
print(ar)

def func(ar):
    l = 0
    for i in range(5):
        k = 0
        for j in range(4):
            if ar[j][i] != 0: k += 1
        if k == 4: l += 1
    return(l)
print("Кол-во столбцов, не содержащих ни одного нулевого элемента = ", func(ar))

def proc(ar):
    xar = []
    for i in range(sz[1]-1):
        xar.append(0)
    for i in range(sz[0]):
        for j in range(sz[1]):
            if ar[i,j] % 2 == 0 and ar[i,j] > 0:
                xar[i] += ar[i,j]   
    print(xar)
proc(ar)

Ответы (1 шт):

Автор решения: splash58
import numpy as np
sz = (4, 5)
ar = np.random.randint(-5, 10, size = sz)

Определить кол-во столбцов, не содержащих ни одного нулевого элемента

print(len(ar[np.where(ar.all(axis=1))]))

отдельный массив xar, в котором находятся характеристики каждой строки

temp = np.where((ar > 0) & ~(ar % 2), 1, 0) * ar
xar = temp.sum(axis=1)

Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик

print(ar[xar.argsort()])
→ Ссылка