2013-05-10 5 views
1

Im пытается итерации по вложенному (numpy) массиву с помощью np.nditer().numpy: итерация по вложенному массиву

Преобразовал вложенный список int в вложенный массив numpy.

from numpy import mean, array, nditer 

nested_list = [[1,2,3],[2,3,4],[3,4,5],[4,5,6]] 

np_array = [] 
for i in nested_list: 
    a = array(nested_list) 
np_array.append(a) 

Указанные работы, приносящие;

[array([[1,2,3], 
     [2,3,4], 
     [3,4,5], 
     [4,5,6]])] 

Я хочу, чтобы вычислить среднее значение каждого вложенного подсписка ... Я попытался это, но он не работает правильно.

np_mean = [] 
c = 0 
for i in nditer(np_array): 
    m = mean(i) 
    np_mean_rep.append(m) 
    c += 1 
print np_mean_rep 

... это свой рода сглаживает вложенный массив, так что я не указует на каждый вложенный подсписок, но вместо того, чтобы каждое значение. Как я мог бы использовать nditer таким образом, чтобы это сработало? Любой указатель будет очень благодарен!

+0

Хм .. ОК. Я просто поработал над итерацией по множеству массивов и нашел nditer. Тем не менее, при попытке это: np_array = [] для г в nested_array: Ь = массив (nested_list) .mean (ось = 1) печати np_array.append (б) я получаю None –

+0

, но если массив вложен (как указано выше), тогда я должен указывать на каждый под-список, правильно? а затем вычислить среднее значение для каждого и добавить его в список np_array? Что означает ось = 1? Я начинающий как в python, так и в numpy. –

ответ

3

[мигрировали из комментариев]

Я думаю, что вы делаете вещи гораздо сложнее, чем они должны быть. Массивы имеют метод .mean(), и вам не нужно создавать объекты по строкам. Вы можете сделать все сразу.

>>> import numpy as np 
>>> nested_list = [[1,2,3],[2,3,4],[3,4,5],[4,5,6]] 
>>> np.array(nested_list) 
array([[1, 2, 3], 
     [2, 3, 4], 
     [3, 4, 5], 
     [4, 5, 6]]) 
>>> np.array(nested_list).mean(axis=1) 
array([ 2., 3., 4., 5.]) 
>>> np.array(nested_list).mean(axis=0) 
array([ 2.5, 3.5, 4.5]) 

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

В целом - хотя и не всегда - если вы обнаружите, что вы пишете for петлями с numpy, вы делаете что-то неправильно. Основным правилом при работе с numpy является попытка векторизации всего (т. Е. Запись вашего кода в терминах операций, которые могут выполняться сразу для всего массива), что означает, что тяжелая работа выполняется в быстрой библиотеке C, а не в медленный уровень Python.

+0

Ничего себе, очень аккуратно! Большое спасибо! –

Смежные вопросы