2013-05-10 5 views
1

np.nditer()를 사용하여 중첩 된 (numpy) 배열을 반복하려고합니다.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

흠 .. 좋아요. 난 그냥 numpy 배열을 반복 검색하고 nditer를 찾았습니다. 그러나,이 시도 : nested_array의 난에 대한 np_array = [] 을 : B = 배열 ​​(nested_list) .mean (축선 = 1) 인쇄 np_array.append (b) I는 없음 –

+0

를 얻을 수 없지만,이 배열은 중첩되면 (위와 같이), 그러면 각 하위 목록을 가리켜 야합니다. 그리고 각각에 대한 평균을 계산하고 그것을 np_array 목록에 추가하십시오. axis = 1은 무엇을 가리 킵니까? 임 파이썬과 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 매개 변수는 우리가 평균을 인수 할 배열의 크기를 지정합니다.

일반적으로 - 항상 그런 것은 아니지만 - numpy을 사용하여 for 루프를 작성하는 경우 문제가 발생합니다. numpy으로 작업 할 때 기본 규칙은 모든 것을 벡터화하려고 시도하는 것입니다 (즉, 전체 배열에서 동시에 수행 할 수있는 작업으로 코드 작성). 즉, 빠른 작업은 빠른 C 라이브러리에서 수행되지만 느린 파이썬 수준.

+0

와우, 아주 깔끔한! 큰 감사를 드린다! –

관련 문제