2017-11-26 9 views
-2

대각선으로 블록 행렬과 대각 행렬을 만들려면 어떻게해야합니까, 이것은 9x9의 행렬이다, 그러나 나는 주어진 값의 nxn 행렬을 만들려면 N.의파이썬 : 나는 그림에 표시된 형태의 매트릭스를 작성해야

그것은 제 1과 -1의 오프셋 대각선 대각선에 의해 제 2 반복을 따라 반복되는 최초 두 개의 블록 행렬을 정의하여이를 생성 할 수 있는가? 이 최종 행렬의 그림을 보여줍니다

내가이 필요합니다

+2

그래서 좋은 아니다 제로의 노력으로 요구 사항을 버리고 누군가가 당신을 위해 일하기를 기대하십시오. –

+2

예, 가능합니다. 나는 당신의 질문에 답했다고 가정합니다. – timgeb

+0

희소 행렬을 만드는 원래의 방법은'coo' 스타일의 입력을 사용합니다. 또한 여러 가지 대각선 스타일과 블록 행렬이 있습니다. – hpaulj

답변

2

내가 생각했기 때문에 당신이 스스로를 시도하지 않았다하더라도, 당신이 원하는 것을하는 function을 만든 그것은이었다 시원한 문제. function


diagonals 함께 3x3 블록을 할당 할 broadcasting를 사용합니다.

def matrix(n): 
    a = np.zeros((n,n), np.int8) 
    for d in range(0, int(n/3)+4, 3): 
     a[d:d+3, d:d+3] = np.array([[-4, 1, 0], [1, -4, 1], [0, 1, -4]]) 
    for d in range(0, int(n/3)+3, 3): 
     a[d:d+3, d+3:d+6] = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) 
     a[d+3:d+6, d:d+3] = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) 
    return a 

및 테스트 :

>>> matrix(9) 
array([[-4, 1, 0, 1, 0, 0, 0, 0, 0], 
     [ 1, -4, 1, 0, 1, 0, 0, 0, 0], 
     [ 0, 1, -4, 0, 0, 1, 0, 0, 0], 
     [ 1, 0, 0, -4, 1, 0, 1, 0, 0], 
     [ 0, 1, 0, 1, -4, 1, 0, 1, 0], 
     [ 0, 0, 1, 0, 1, -4, 0, 0, 1], 
     [ 0, 0, 0, 1, 0, 0, -4, 1, 0], 
     [ 0, 0, 0, 0, 1, 0, 1, -4, 1], 
     [ 0, 0, 0, 0, 0, 1, 0, 1, -4]], dtype=int8) 

그리고 그냥 내가 matplotlib과 결과를 꾸몄다하고있어, 작동 표시하기 :

plot

+0

프로그램을 설명해 주시겠습니까? –

+0

scipy에서 스파 스 매트릭스 함수 중 하나를 사용하여이 작업을 수행 할 수 있습니까? 이 문제를 해결할 수 있습니까? –

+0

@AzlaanMustafaSamad 대각선을 반복하면서 패턴을'matrix'의'3x3' 세그먼트에 적용합니다. 코드를 따라 가면 무슨 일이 일어나는지 볼 수 있어야합니다. 필자는'드문 드문''매트릭스''함수'에 익숙하지 않아 도움이되지 않을 것입니다. 어쨌든이 특별한 요구 사항으로 새로운 질문을해야합니다. 이 문제에 관해서는 내 대답 ('grey' ->'green' tick)을'받아 들여서 문제가 해결되었음을 보여주세요. 고맙습니다! –