NumPy에서 1D 배열을 2D 배열로 변환하는 방법
reshape() 함수 사용
reshape()
함수는 NumPy에서 배열의 모양을 변경하는 데 가장 기본적인 방법입니다. 다음과 같은 형식으로 사용됩니다.
numpy.reshape(arr, newshape)
여기서:
arr
은 변환하려는 1D 배열입니다.newshape
는 변환된 2D 배열의 원하는 모양입니다. 튜플 형식으로 지정해야 합니다.
예를 들어, 다음 코드는 10개의 요소를 가진 1D 배열을 2 x 5 행렬로 변환합니다.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
new_arr = arr.reshape((2, 5))
print(new_arr)
출력:
[[1 2 3 4 5]
[6 7 8 9 10]]
reshape()
함수는 원하는 모양에 맞는 충분한 요소가 있는 1D 배열만 변환할 수 있다는 점에 유의해야 합니다. 요소가 부족하면 오류가 발생합니다.
[:, None] 사용
1D 배열을 2D 배열로 변환하는 간단한 방법은 [:, None]
슬라이싱을 사용하는 것입니다. 이 방법은 다음과 같이 작동합니다.
:
은 모든 행을 선택합니다.None
은 선택된 각 행에 새로운 열을 추가합니다.
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
new_arr = arr[:, None]
print(new_arr)
출력:
[[1]
[2]
[3]
[4]
[5]]
이 방법은 간단하지만, 원하는 모양이 정확히 2 x 1 열렬인 경우에만 사용할 수 있다는 단점이 있습니다.
stack() 함수 사용
stack()
함수는 여러 1D 배열을 2D 배열로 연결하는 데 사용할 수 있습니다. 다음과 같은 형식으로 사용됩니다.
numpy.stack(arrays, axis=None)
arrays
는 연결하려는 1D 배열들의 리스트입니다.axis
는 연결 축을 지정합니다. 기본값은None
이며, 이 경우 모든 배열을 첫 번째 축에 연결합니다.
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
new_arr = np.stack((arr1, arr2), axis=1)
print(new_arr)
출력:
[[1 4]
[2 5]
[3 6]]
stack()
함수는 여러 1D 배열을 연결하는 데 유연한 방법을 제공합니다.
결론
1D 배열을 2D 배열로 변환하는 NumPy에는 여러 가지 방법이 있습니다. 상황에 따라 적합한 방법을 선택하는 것이 중요합니다.
reshape()
함수는 간단하고 직관적이지만, 원하는 모양에 맞는 충분한 요소가 있는 배열만 변환할 수 있습니다.[:, None]
슬라이싱은 간단하지만, 원하는 모양이 정확히 2 x 1 열렬인 경우에만 사용할 수 있습니다.
NumPy에서 1D 배열을 2D 배열로 변환하는 예제 코드
reshape() 함수 사용
import numpy as np
# 1D 배열 생성
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 2 x 5 행렬로 변환
new_arr = arr.reshape((2, 5))
print(new_arr)
출력:
[[1 2 3 4 5]
[6 7 8 9 10]]
[:, None] 사용
import numpy as np
# 1D 배열 생성
arr = np.array([1, 2, 3, 4, 5])
# 2 x 1 열렬로 변환
new_arr = arr[:, None]
print(new_arr)
출력:
[[1]
[2]
[3]
[4]
[5]]
stack() 함수 사용
import numpy as np
# 1D 배열 생성
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 2 x 5 행렬로 변환
new_arr = np.stack((arr1, arr2), axis=1)
print(new_arr)
출력:
[[1 4]
[2 5]
[3 6]]
이 코드는 1D 배열을 2D 배열로 변환하는 세 가지 기본적인 방법을 보여줍니다. 상황에 따라 적합한 방법을 선택하세요.
추가 예제
다음은 1D 배열을 원하는 모양의 2D 배열로 변환하는 방법을 보여주는 몇 가지 추가 예제입니다.
- 3 x 3 행렬로 변환:
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
new_arr = arr.reshape((3, 3))
print(new_arr)
출력:
[[1 2 3]
[4 5 6]
[7 8 9]]
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
new_arr = arr.reshape((5, 2))
print(new_arr)
출력:
[[1 2]
[3 4]
[5 6]
[7 8]
[9 10]]
- 임의의 행과 열을 가진 2D 배열로 변환:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
rows = 4
cols = 6
new_arr = arr.reshape((rows, cols))
# 행과 열의 개수가 배열의 총 요소와 일치하는지 확인합니다.
if rows * cols != len(arr):
raise ValueError("원하는 모양에 맞는 충분한 요소가 배열에 없습니다.")
print(new_arr)
NumPy에서 1D 배열을 2D 배열로 변환하는 대체 방법
tile() 함수 사용
tile()
함수는 배열을 반복하여 원하는 모양으로 복제하는 데 사용할 수 있습니다. 다음과 같은 형식으로 사용됩니다.
numpy.tile(arr, reps)
reps
는 배열을 반복할 횟수를 나타내는 튜플입니다. 튜플의 각 요소는 해당 축에서의 반복 횟수를 나타냅니다.
import numpy as np
arr = np.array([1, 2, 3])
new_arr = np.tile(arr, (4, 3))
print(new_arr)
출력:
[[1 1 1]
[2 2 2]
[3 3 3]
[1 1 1]]
tile()
함수는 특정 패턴으로 배열을 반복하는 데 유용할 수 있습니다.
리스트 내포 사용
다음과 같이 리스트 내포를 사용하여 1D 배열을 2D 배열로 변환할 수도 있습니다.
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
rows = 2
cols = 5
new_arr = [[element for element in arr[i : i + cols]] for i in range(0, len(arr), rows)]
print(new_arr)
출력:
[[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10]]
이 방법은 다소 복잡하지만, 더 많은 제어와 유연성을 제공합니다.
hstack() 및 vstack() 함수 사용
hstack()
및 vstack()
함수를 사용하여 여러 1D 배열을 2D 배열로 연결할 수 있습니다.
hstack()
은 가로 방향으로 배열을 연결합니다.
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
new_arr = np.hstack((arr1, arr2))
new_arr = np.vstack((new_arr, new_arr))
print(new_arr)
출력:
[[1 2 3 4 5]
[1 2 3 4 5]]
이 방법은 여러 1D 배열을 연결하는 간단한 방법입니다.
결론
- 리스트 내포는 더 많은 제어와 유연성을 제공합니다.
이 외에도 newaxis
를 사용하거나 함수를 직접 작성하는 등 1D 배열을 2D 배열로 변환하는 다른 방법도 있습니다.
python arrays matrix