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

[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) 코드 없이 깔끔하게 배열을 쌓을 수 있습니다.

반응형