По столбцу установка всех значений, соответствующих условию, в ноль - PullRequest
1 голос
/ 22 февраля 2020

У меня есть массив, который выглядит следующим образом:


    M=np.array([[1,2,3],[4,9,2],[3,5,6],[8,1,3]])

> M = [[1,2,3],
>      [4,9,2],
>      [3,5,6],
>      [8,1,3]]

Для каждого столбца я хочу установить два наименьших значения на ноль.

Таким образом, я сортирую их по убыванию порядок (я знаю, что по возрастанию будет быстрее)


    M1 = np.sort(M, axis=0)[::-1]

Тогда я хочу использовать что-то вроде


    for column in range(M.shape[1]):
        for row in range(M.shape[0]):
            if M[row, column] < M1[1,column]:        
                M[row, column] = 0

и получить:

> M = [[0,0,0],
>      [4,9,0],
>      [0,5,6],
>      [8,0,3]]

Как я могу сделать эта последняя часть более эффективна (для массива или DataFrame)?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2020

Попробуйте:

M[M< M1[1,:]]=0

Выходы:

[[0 0 3]
 [4 9 0]
 [0 5 6]
 [8 0 3]]
1 голос
/ 22 февраля 2020

Здесь можно использовать маску, которую вы строите с помощью:

M < M1[1,:]

, поэтому мы можем установить элементы, для которых выполняется это условие, на 0 с помощью:

M[M < M1[1,:]] = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...