파이썬 loop 질문드립니다

파이썬 loop 질문드립니다

QA

파이썬 loop 질문드립니다

본문

#      [,0] [,1] [,2] [,3] [,4] 

#[0,]   17   11    5    3    1

#[1,]   19   13    7    4    2

#[2,]   21   15    9    8    6

#[3,]   23   16   14   12   10

#[4,]   25   24   22   20   18

안녕하세요 파이썬 공부하고 있는 초보자입니다 loop문을 1번만 사용해서 위와 같은 행렬을 만드려고 하는데 아래 if부분 코드작성에 어려움을 겪고 있습니다 ㅜㅜ 답변 남겨주시면 정말 감사드리겠습니다

 

def MyMatrix2(n):

    #

    # n = dimesion of (nXn) square matrix

    

    if n < 2:

        print(f'{"n ="} {n} {"should be >=2"}')

 

    A = np.zeros([n,n], dtype=int)

    

    # for example, n=5

    # anti-diagonal component

    # A[idx] = (5:1)^2, where idx = (4,0), (3,1), (2,2), (1,3), (0,4)

    A[np.arange(n-1,-1,-1), np.arange(0,n)] = np.arange(n, 0, -1)**2

    

    for i in np.arange(0, n):#start of "for" loop

        #

        # if i=4, idx = 5-4-1 = 0 --> [4,0] = [i,idx]

        idx = n - i - 1

       

        if A[idx,i] :

            

            start_ = A[idx,i] - 2 * i

            end_ = A[idx,i] - 2

            row_vec = np.arange(start_, end_ + 1, 2)

            col_vec = row_vec + 1

            #

            A[idx, np.arange(0,i)] = row_vec

            A[np.arange(n-1,idx,-1),i] = col_vec

        

        else:

            start_ = A[idx,i] - 2*i

            end_ = A[idx,i] - 2

            col_vec = np.arange(start_, end_ + 1, 2)

            row_vec = col_vec + 1

        

            A[idx, np.arange(0,i)] = row_vec

            A[np.arange(n-1, idx, -1),i] = col_vec

    return(A)    

    

이 질문에 댓글 쓰기 :

답변 1

import numpy as np
def MyMatrix2(n):
    #
    # n = dimesion of (nXn) square matrix
    if n < 2:
        print(f'{"n ="} {n} {"should be >=2"}')
    A = np.zeros([n,n], dtype=int)
    # for example, n=5
    # anti-diagonal component
    # A[idx] = (5:1)^2, where idx = (4,0), (3,1), (2,2), (1,3), (0,4)
    A[np.arange(n-1,-1,-1), np.arange(0,n)] = np.arange(n, 0, -1)**2
    for i in np.arange(0, n):#start of "for" loop
        #
        # if i=4, idx = 5-4-1 = 0 --> [4,0] = [i,idx]
        idx = n - i - 1
        if A[idx,i] :
            start_ = A[idx,i] - 2 * i
            end_ = A[idx,i] - 2
            row_vec = np.arange(start_, end_ + 1, 2)
            col_vec = row_vec + 1
            #
            A[idx, np.arange(0,i)] = row_vec
            A[np.arange(n-1,idx,-1),i] = col_vec
        else:
            start_ = A[idx,i] - 2*i
            end_ = A[idx,i] - 2
            col_vec = np.arange(start_, end_ + 1, 2)
            row_vec = col_vec + 1
            A[idx, np.arange(0,i)] = row_vec
            A[np.arange(n-1, idx, -1),i] = col_vec
    return(A)
A= MyMatrix2(4)
print('\n'.join([''.join(['{:4}'.format(item) for item in row]) for row in A]))

#또는 print(np.matrix(A))

 

-5  -3  -1  1              먼저 답변 주셔서 정말 감사드립니다!!
  0  2  4  0            <-- 실행했을때 왼편의 행렬이 출력되었는데 실례지만 혹시 다시 한번만 봐                                                                 
  7  9  3  -2
  16  8  1  -4                                    주실수 있을까요?!

답변을 작성하시기 전에 로그인 해주세요.
전체 4

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT