Методы для работы со всеми столбцами в двумерном массиве.

У меня есть список списков значений (где каждый список значений имеет одинаковую длину), в 2D ndarray. пример

[[0,1,0],
 [0,1,0],
 [0,1,0],
 [1,0,1],
 [1,0,1]]

Я хотел бы выполнить операцию, которая усредняет столбец и возвращает, если среднее значение больше, чем.5. Как бы я достиг этого в NumPy?

Я знаю, что мог бы использовать

for i in range(len(vectors[0])):
    cur_vals = []        
    for j in range(len(vectors)):
        cur_vals.append(vectors[j][i])
    col_operation(cur_vals)

Однако мне сказали, что numpy предоставляет утилиты, подобные R, для этого, поэтому я специально искал это.

1 ответ

Решение

Вы можете указать аргумент оси для .mean():

In [180]: a
Out[180]: 
array([[0, 1, 0],
       [0, 1, 0],
       [0, 1, 0],
       [1, 0, 1],
       [1, 0, 1]])

In [194]: a.mean(axis=0)
Out[194]: array([ 0.4,  0.6,  0.4])

Теперь сгенерируйте логическую маску, например:

In [195]: a.mean(axis=0) > .5
Out[195]: array([False,  True, False], dtype=bool)

Чтобы получить столбец со средним значением> .5, используйте логическое индексирование:

In [196]: a.T[a.mean(axis=0) > .5] # you'll need the transpose first
Out[196]: array([[1, 1, 1, 0, 0]])
Другие вопросы по тегам