Режим поиска ненулевых элементов в массиве Numpy - PullRequest
0 голосов
/ 14 февраля 2019

Какой самый эффективный способ найти режим для строки в многомерном массиве ненулевых элементов?

Например:

[
 [0.  0.4 0.6 0.  0.6 0.  0.6 0.  0.  0.6 0.  0.6 0.6 0.6 0.  0.  0.  0.6
     0.  0.  0.  0.  0.  0.  0.  0.  0.5 0.6 0.  0.  0.6 0.6 0.6 0.  0.  0.6
     0.6 0.6 0.  0.5 0.6 0.6 0.  0.  0.6 0.  0.6 0.  0.  0.6],
 [0.  0.1 0.2 0.1 0.  0.1 0.1 0.1 0.  0.1 0.  0.  0.  0.1 0.1 0.  0.1 0.1
 0.  0.1 0.1 0.1 0.  0.1 0.1 0.1 0.  0.1 0.2 0.  0.1 0.1 0.  0.1 0.1 0.1
 0.  0.2 0.1 0.  0.1 0.  0.1 0.1 0.  0.1 0.  0.1 0.  0.1]
]

Режим выше[0, 0.1], но в идеале мы хотим вернуть [0.6, 0.1].

1 Ответ

0 голосов
/ 14 февраля 2019

Вы бы использовали тот же метод, что и этот вопрос (упоминается в комментариях @yatu), но вместо этого вызовите метод numpy.nonzero().

Чтобы получить только ненулевые элементы, мы можем просто вызвать метод nonzero, который вернет индексы ненулевых элементов.Мы можем сделать это с помощью этой команды, если a является пустым массивом:

a[nonzero(a)]

Пример поиска режима (построение кода из другого ответа):

import numpy as np
from scipy import stats

a = np.array([
    [1, 0, 4, 2, 2, 7],
    [5, 2, 0, 1, 4, 1],
    [3, 3, 2, 0, 1, 1]]
)

def nonzero_mode(arr):
    return stats.mode(arr[np.nonzero(arr)]).mode

m = map(nonzero_mode, a)
print(m)

Если вы хотите получить режим каждой строки, просто используйте цикл через массив:

for row in a:
   print(nonzero_mode(row))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...