2016-10-22 3 views
-1

저는 파이썬에 매우 익숙해졌습니다.for 루프에서 배열에 목록 추가하기

2x2 배열의 모든 요소에 1을 더하는 for 루프를 실행하려고합니다. 그러나 각 루프 이후에 각 행렬을 저장하려고합니다. 이 작업을 수행하려면 .append() 사용하고 있지만 그것은 최종 결과를 여러 번 저장하는 것 같습니다.

result = [] 

def f(): 
    x= np.matrix([[1, 2],[3, 4]]) 
    for i in range(5): 
    result.append(x) 
    x += 1 
    return result 

function = f() 

print function 

는하지만 출력은 다음과 같습니다

대신 모든 결과를 로그의 마지막 반복의 단지 반복입니다
[matrix([[6, 7], 
    [8, 9]]), matrix([[6, 7], 
    [8, 9]]), matrix([[6, 7], 
    [8, 9]]), matrix([[6, 7], 
    [8, 9]]), matrix([[6, 7], 
    [8, 9]])]' 

. 도움이 될 것입니다.

+0

당신이 내 대답은 아래를 확인 했거야? 너 정확히 원하는거야? – ettanany

+0

아래 질문에 대한 답과 함께 해결 방법이 설명되어 있습니다. 만약 당신이 아직도 의심을 가지고 있다면 알려주세요 :-) –

답변

0

는 다음과 같은 시도 :

import numpy as np 

result = [] 

def f(): 
    x = np.matrix([[1, 2],[3, 4]]) 
    for i in range(5): 
    result.append(x + i) 
    return result 

res = f() 

결과 :

>>> res 
[matrix([[1, 2], 
     [3, 4]]), matrix([[2, 3], 
     [4, 5]]), matrix([[3, 4], 
     [5, 6]]), matrix([[4, 5], 
     [6, 7]]), matrix([[5, 6], 
     [7, 8]])] 
0

백엔드에서, 파이썬은 포인터를 통해 모든 것을 처리하는 것입니다 일어나는 이유. 따라서 x을 추가 할 때마다 x에 대한 포인터를 추가하는 것입니다. 그러나 각 단계에서 동일한 위치를 가리키는 포인터를 추가하는 것입니다. 따라서 그들은 모두 행렬 x의 최종 값을 저장하는 행렬을 가리 킵니다. 대신 x.copy()`를 추가하여 행렬 사본을 만들어야합니다. 수정 된 코드는 다음과 같습니다

result = [] 

def f(): 
    x= np.matrix([[1, 2],[3, 4]]) 
    for i in range(5): 
    result.append(x.copy()) 
    x += 1 
    return result 

function = f() 

print(function) 

내 파이썬 3을하려고 할 때, 나는 출력

[matrix([[1, 2], 
     [3, 4]]), matrix([[2, 3], 
     [4, 5]]), matrix([[3, 4], 
     [5, 6]]), matrix([[4, 5], 
     [6, 7]]), matrix([[5, 6], 
     [7, 8]])] 
+0

@seewaq 제 답변이 당신을 도왔다면 친절하게 대답으로 받아 들여 upvote :-) 자세한 내용은 http://stackoverflow.com/help/someone-answers를 참조하십시오. –

관련 문제