Numpy 배열의 열을 반복하는 방법은 무엇입니까?


109

내가 가지고 있고 mxn 배열이라고 가정합니다. 이 배열의 각 열을 함수에 전달하여 전체 열에 대해 일부 작업을 수행하고 싶습니다. 배열의 열을 어떻게 반복합니까?

예를 들어, 다음과 같은 4 x 3 배열이 있습니다.

1  99 2
2  14 5
3  12 7
4  43 1

for column in array:
  some_function(column)

여기서 열은 첫 번째 반복에서 "1,2,3,4", 두 번째 반복에서 "99,14,12,43", 세 번째 반복에서 "2,5,7,1"입니다.


2
인덱스를 사용할 수 없습니까 --- stackoverflow.com/questions/4455076/…
ev-br

답변:


225

배열의 전치에 대해 반복하십시오.

for column in array.T:
   some_function(column)

6
결과를 단일 배열로 다시 결합하는 좋은 방법은 무엇입니까?
Ibrahim Muhammad

46
궁금 사람들을 위해, array.T그것은 단지의 '진보'를 변화로, 비용이 많이 드는되지 않습니다 array(볼 이 대답 흥미로운 토론을)
drevicko

19

이것은 당신에게 시작을 줄 것입니다

>>> for col in range(arr.shape[1]):
    some_function(arr[:,col])


[1 2 3 4]
[99 14 12 43]
[2 5 7 1]

7
나에게는 비단뱀처럼 보이지 않습니다.
gronostaj 2014

@gronostaj 물론 Pythonic입니다. 다차원 배열의 임의의 축을 반복 할 때이 문제를 어떻게 해결할 수 있습니까?
Neil G

1
@NeilG이 질문은 엄격히 2 차원 배열에 관한 것입니다.
gronostaj

6

3 차원 배열의 경우 다음을 시도 할 수 있습니다.

for c in array.transpose(1, 0, 2):
    do_stuff(c)

array.transpose작동 방식 에 대한 문서를 참조하십시오 . 기본적으로 이동할 차원을 지정합니다. 이 경우 두 번째 차원 (예 : 열)을 첫 번째 차원으로 이동합니다.


5
for c in np.hsplit(array, array.shape[1]):
    some_fun(c)

4

압축 해제를 사용하여 열을 반복 할 수도 있습니다.

for col in zip(*array):
   some_function(col)

2

예를 들어 행렬에서 각 열의 평균을 찾고 싶습니다. 다음 행렬을 만들어 보겠습니다.

mat2 = np.array([1,5,6,7,3,0,3,5,9,10,8,0], dtype=np.float64).reshape(3, 4)

평균 함수는 다음과 같습니다.

def my_mean(x):
    return sum(x)/len(x)

필요한 작업을 수행하고 결과를 콜론 벡터 '결과'에 저장하려면

results = np.zeros(4)
for i in range(0, 4):
    mat2[:, i] = my_mean(mat2[:, i])

results = mat2[1,:]      

결과는 다음과 같습니다. array ([4.33333333, 5., 5.66666667, 4.])


0

또는 enumerate. 열 번호와 열 값도 제공합니다.

for num, column in enumerate(array.T):
    some_function(column) # column: Gives you the column value as asked in the question
    some_function(num) # num: Gives you the column number 

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.