2012-10-18 4 views
-1

저는 대각선 (왼쪽에서 오른쪽 아래)을 따라 모든 숫자를 대체하기 위해 행렬을 반복하려고합니다. 나는 이전의 질문과 대답을 읽었으며, 당신은 그 대답을 얻기 위해 ... np.fill_diagonal(A, -5)을 사용할 수 있음을 알고 있습니다. 그러나 if 문을 사용하여 루프를 사용하려고합니다. 아무도 나를 시작할 수 있도록 도와 줄 수 있습니까? 여기 내 매트릭스가있다.if 문을 사용하여 행렬의 대각선을 변경합니까?

A = array([[1.2,3.4,10.3],[2,8,78],[45,-36,8]]) 
+0

'if' 문으로 무엇을 테스트하겠습니까? – heltonbiker

+0

@heltonbiker - OP에서 행렬의 각 요소를 반복하고 싶다면 'i == j'이면 테스트하고, 그렇다면 업데이트하십시오. – mgilson

답변

1

, 당신은 (실제로, 아주 바보) 때문에, 열 및 행을 반복 할 :

for i in A.shape[0]: 
    for j in A.shape[1]: 
     if i == j: 
      A[i,j] = -5 

을 나는이 경우 필요하지 않습니다 생각해야하지만 당신은 이미 배열/매트릭스를 가지고 있고, Mgilson의 대답을 사용하거나, 더 나아가서는 numpy.fill_diagonal(array, value)을 사용합니다.

+2

내 대답을 사용하지 마십시오. **'np.fill_diagonal' **을 사용하십시오. – mgilson

+0

고마워, 고마워. 이것이 제가 찾고 있던 것입니다. – Bill

4

이것은 매우 쉽습니다. 행렬은 정사각형이어야하며 그렇지 않으면 실제로 "대각선"이 없습니다. 대각선의 요소는 A[i,i]이므로 for i in range(N)을 반복하고 각 i에 대해 A[i,i] = -5을 설정하면됩니다. (없음 필요한 진술 경우) 내가 바로 그것을 가지고있는 경우

+0

하지만 if 명령을 사용하여 수행하는 방법이 있습니까? – Bill

+0

@ user1754710 : 요점은'if' 문이 필요 없다는 것입니다. 이런 식으로 정말로하고 싶다면'for = '루프를 사용하고'i == j'일 때 값을 '-5'로 설정하십시오. – martineau

0

numpy을 사용해야하지만 배열의 길이는 numpy.array 또는 numpy.matrix이어야합니다.

In [1]: import numpy as np 
In [2]: A=np.random.random((3,3)) 
In [3]: A 
Out[3]: 
array([[ 5.  , 0.47884865, 0.8596375 ], 
     [ 0.70925986, 5.  , 0.29764543], 
     [ 0.98049303, 0.13811067, 5.  ]]) 

In [4]: np.fill_diagonal(A, 5) 

In [5]: A 
Out[5]: 
array([[ 5.  , 0.47884865, 0.8596375 ], 
     [ 0.70925986, 5.  , 0.29764543], 
     [ 0.98049303, 0.13811067, 5.  ]]) 
관련 문제