본문 바로가기
개발/오늘의 개발일지

[Python] 빈 배열 변수에 배열 쌓는 방법 이해하기

by 꾀돌이 개발자 2024. 11. 18.
반응형

 

빈 배열에 일정한 길이의 배열을 쌓는 방법을 이해합니다.

 

 

 
 

목차

     

    개발 의도

    import numpy as np
    
    # 기존의 빈 배열 a
    a = np.array([])
    
    for i in range(3):
        # 새로 쌓을 길이 3의 배열
        if len(a) == 0:
            a = np.array([i, i, i])
        else:
            a = np.vstack((a, np.array([i, i, i])))
    
    print(a)
    
    # 출력값: [[0,0,0],[1,1,1],[2,2,2]]

    - 위와 같이 빈 배열 a에 일정한 길이의 배열을 쌓는 코드를 작성합니다.

     

    문제 상황

    - 위 코드는 정상적으로 작동합니다.

     

    -  단, 조건문과 len(a) 없이 배열을 쌓는 코드 작성 방법을 찾아봅니다.

     

    문제 원인 파악

    import numpy as np
    
    # 기존의 빈 배열 a
    a = np.array([])
    
    for i in range(3):
        # 새로 쌓을 길이 3의 배열
        a = np.vstack((a, np.array([i, i, i])))
    
    print(a)
    
    # 출력값: ValueError: all the input......

    - 위와 같이 조건문 없이 배열을 쌓는다면

          배열 a의 shape(크기) 불일치 문제가 발생합니다.

     

    - 배열 a의 shape(크기)을 정의한 뒤

          배열을 쌓아봅니다.

     

    shape 정의를 통한 배열 쌓기

    import numpy as np
    
    # 기존의 빈 배열 a
    a = np.array([])
    
    # 길이 3의 배열을 쌓으려면 먼저 2차원 배열로 초기화해야 합니다.
    a = np.reshape(a, (0, 3))
    
    for i in range(3):
        # 새로 쌓을 길이 3의 배열
        a = np.vstack((a, np.array([i, i, i])))
    
    print(a)
    
    # 출력값: [[0,0,0],[1,1,1],[2,2,2]]

    - a = np.reshape(a, (0, 3))를 통해 길이 3의 2차원 배열로 초기화합니다.

     

    - 이 후 배열을 정상적으로 쌓을 수 있습니다.

     

    아래 코드로 디버깅 완료

    import numpy as np
    
    # 기존의 빈 배열 a
    a = np.array([])
    
    # 길이 3의 배열을 쌓으려면 먼저 2차원 배열로 초기화해야 합니다.
    a = np.reshape(a, (0, 3))
    
    for i in range(3):
        # 새로 쌓을 길이 3의 배열
        a = np.vstack((a, np.array([i, i, i])))
    
    print(a)
    
    # 출력값: [[0,0,0],[1,1,1],[2,2,2]]

    - 결과적으로 a의 배열 정의를 통해

          조건문과 len(a) 코드 없이 깔끔하게 배열을 쌓을 수 있습니다.

    반응형