2013-07-11 2 views
2

루프별로 열별로 numpy 배열을 수정하는 방법이 있습니까? 나는이 기대numpy 배열을 루프 내에서 열별로 수정하십시오.

는 같은 일부 코드에 의해 수행 될 수있다 :

내가 mnX=[[10,23],[12,24]]를 얻기 위해 사용해야하는 매개 변수
import numpy as n 

cnA=n.array([[10,20]]).T 
mnX=n.array([[1,2],[3,4]]) 
for cnX in n.nditer(mnX.T, <some params>): 
    cnX = cnX+cnA 

?

나는이 문제는 다음 코드를 사용하여 해결 될 수 있다는 것을 알고 :

cnA=n.array([10,20]) 
mnX=n.array([[1,2],[3,4]]) 
for col in range(mnX.shape[1]): 
    mnX[:,col] = mnX[:,col]+cnA 

질문은 그래서 Hovewer, 파이썬 우리 루프에서 수정 된 개체를하지 인덱스, - 컬럼을 통해 루프로 가능하다 (그 곳에서 수정해야하는) 직접?

+0

는 NumPy와의 배열 구문을 자르는 알고 있습니까? http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#arrays-indexing – DaveP

+0

매트릭스라고하지 만 코드에 ndarray라고 표시되어 있습니까? 그것들은 서로 다른 두 가지입니다. – usethedeathstar

+0

고마워요. 나는 나의 질문을 바로 잡고 연장했다. – Apogentus

답변

4

우리가 알고있는 바로는, 파이썬에서 우리 중 일부는 색인을 반복하고 변경된 객체가 도움이 될 때이를 반복하지 않습니다. 문제에 대한 가장 간단한 방법은 반복을 생략하는 것과 방송에 의존 : 밖으로 다른 방법이없는 경우를 제외하고 NumPy와에 있지만, 일반적으로, 우리는 명시 적으로 반복하지 마십시오 경우

mnX += cnA 

반복하는 주장, 나는 단순한는 전치 배열을 반복하는 것입니다 생각 :

for col in mnX.T: 
    col += cnA[:, 0].T 
+0

감사합니다. Jaime. 물론이 간단한 작업을 위해 방송을 사용할 수는 있지만 초기 작업에서는 더 복잡한 작업을 수행해야합니다. 실제로 필요한 것은 열 인덱스를 사용하지 않고 배열 mnX를 해당 위치에서 열별로 수정하여 구문을 아는 것입니다. 당신의 예제는 mnX를 변경하지 않은 채로 남겨 둡니다. – Apogentus

+0

@Apogentus Jaime의 예제는'mnX'를 수정합니다 :'col'은'mnX'의 뷰이고 inplace ('+ =')를 수정하면'mnX'가 변경됩니다. 사실, 열 인덱스를 사용하지 않고 배열을 열에 의해 수정하여 정확하게 배열 mnX를 수정합니다. – jorgeca

+0

테스트 됨 ... 작동하여 완전히 내 질문에 답합니다! 고맙습니다! – Apogentus

관련 문제