HOWTO · Python
Python에서 2D 배열을 추가하는 방법
네이티브 리스트와 NumPy를 사용해 Python에서 2D 배열에 값을 추가하는 방법을 알아보세요. 이 가이드에서는 append(), extend(), numpy.append()와 같은 메서드를 행, 열 및 동적 데이터에 대한 예제와 함께 다룹니다. 데이터 조작과 수치 컴퓨팅에 완벽합니다!
이 페이지의 내용
Python에서 2D 배열에 값을 추가하는 것은 데이터 조작, 수치 컴퓨팅, 데이터 과학 응용 프로그램에서 일반적인 작업입니다. 네이티브 Python 리스트로 작업하든 효율성을 위해 NumPy를 사용하든, 2D 배열에 행, 열 또는 개별 값을 추가하는 여러 가지 방법이 있습니다. 이 가이드에서는 다양한 기술, 그 장점 및 사용 사례를 살펴봅니다.
중첩 리스트 사용하기(Python 리스트)
Python의 내장 리스트는 리스트의 리스트로 2D 배열을 나타낼 수 있습니다. 값을 추가하는 가장 간단한 방법은 append() 메서드를 사용하는 것입니다.
새 행 추가하기
array = [[1, 2, 3], [4, 5, 6]]
array.append([7, 8, 9])
print(array)
출력:
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
이 메서드는 기존 리스트에 완전히 새로운 행을 추가합니다. append() 메서드는 시간이 지남에 따라 더 많은 데이터를 추가해 2D 리스트를 동적으로 확장하고자 할 때 유용합니다. 그러나 구조화된 데이터 처리를 위해서는 모든 행의 길이가 동일해야 할 수 있다는 점에 유의하세요.
기존 행에 값 추가하기
array[0].append(10)
print(array)
출력:
[[1, 2, 3, 10],
[4, 5, 6],
[7, 8, 9]]
이 메서드는 새 요소를 추가해 특정 행을 수정합니다. 새 행을 추가하는 것과 달리, 이 작업은 지정된 행에만 영향을 미치며, 제대로 관리하지 않으면 불규칙한 열 구조가 될 수 있습니다.
리스트 컴프리헨션 사용하기
리스트 컴프리헨션은 2D 리스트의 모든 행에 값을 추가하는 우아한 방법을 제공합니다.
array = [[1, 2], [3, 4]]
array = [row + [5] for row in array]
print(array)
출력:
[[1, 2, 5],
[3, 4, 5]]
이 메서드는 각 행에 새 열을 효율적으로 추가합니다. 각 행을 순회하며 값을 추가함으로써, 리스트 컴프리헨션은 새 열이 모든 행에 균일하게 추가되도록 보장합니다.
NumPy 배열 사용하기
NumPy는 2D 배열의 값을 효율적으로 처리하고 추가하기 위한 강력한 메서드를 제공합니다. 그러나 빈 값이 많은 대규모 데이터 세트를 다룰 때는 희소 행렬을 사용하면 메모리 소비를 크게 줄일 수 있습니다. [Python의 희소 행렬]({{relref “/HowTo/Python/sparse matrix in python.en.md”}})과 그것이 스토리지를 최적화하는 방법에 대해 자세히 알아보세요.
numpy.append() 사용하기
import numpy as np
array = np.array([[1, 2], [3, 4]])
array = np.append(array, [[5, 6]], axis=0)
print(array)
출력:
[[1 2]
[3 4]
[5 6]]
이 메서드는 NumPy 배열에 새 행을 추가합니다. numpy.append() 함수는 대규모 데이터 세트를 다룰 때 유용한데, 네이티브 Python 리스트에 비해 효율적인 메모리 관리를 보장하기 때문입니다.
새 열을 추가하려면:
array = np.append(array, [[7], [8], [9]], axis=1)
print(array)
출력:
[[1 2 7]
[3 4 8]
[5 6 9]]
값을 추가한 후에는 나중에 사용하기 위해 수정된 배열을 파일에 저장해야 할 수 있습니다. NumPy 배열을 효율적으로 저장하는 방법에 대한 자세한 내용은 [배열을 텍스트 파일에 쓰기]({{relref “/HowTo/Python/write array to a textfile.en.md”}}) 가이드를 참조하세요.
NumPy 배열을 수정하는 동안 인덱싱 오류가 발생하면, 일반적인 실수를 해결하기 위해 ‘Too Many Indices for Array’ 오류 수정 가이드를 참조하세요.
numpy.hstack() 및 numpy.vstack() 사용하기
NumPy의 hstack() 및 vstack() 함수는 열과 행을 효율적으로 추가하도록 설계되었습니다.
hstack()을 사용해 열 추가하기
import numpy as np
array = np.array([[1, 2], [3, 4]])
new_column = np.array([[5], [6]])
result = np.hstack((array, new_column))
print(result)
출력:
[[1 2 5]
[3 4 6]]
vstack()을 사용해 행 추가하기
new_row = np.array([[5, 6]])
result = np.vstack((array, new_row))
print(result)
출력:
[[1 2]
[3 4]
[5 6]]
이러한 메서드는 효율적이며 대규모 데이터 세트로 작업할 때 권장됩니다. 전체 배열을 재구성해야 할 수 있는 numpy.append()와 달리, hstack()과 vstack()은 각각 열 방향 및 행 방향 확장에 최적화되어 있습니다.
구조화된 수치 데이터로 작업하는 경우, 데이터를 효율적으로 재구성하기 위해 행렬을 전치해야 할 수도 있습니다. Python에서 행렬 전치하기에 대한 문서를 확인하세요.
+= 연산자 사용하기
array = [[1, 2], [3, 4]]
array += [[5, 6]]
print(array)
출력:
[[1, 2],
[3, 4],
[5, 6]]
이 메서드는 append()의 약식이지만 리스트를 제자리에서 수정합니다. +=를 사용하면 새 참조를 만들지 않고 새 행이 직접 추가되므로, 작은 2D 리스트를 처리하는 효율적인 접근 방식입니다.
extend()를 사용해 여러 행 추가하기
array = [[1, 2], [3, 4]]
array.extend([[5, 6], [7, 8]])
print(array)
출력:
[[1, 2],
[3, 4],
[5, 6],
[7, 8]]
이는 한 번에 여러 행을 추가할 때 유용합니다. extend() 메서드는 서로 다른 소스의 데이터를 하나의 2D 리스트로 병합할 때 특히 유용합니다.
업데이트된 리스트를 CSV 파일로 저장해야 하는 경우, Python에서 리스트를 CSV 파일에 쓰기 가이드를 확인할 수 있습니다.
insert()를 사용해 특정 인덱스에 행 추가하기
array = [[1, 2], [3, 4]]
array.insert(1, [5, 6])
print(array)
출력:
[[1, 2],
[5, 6],
[3, 4]]
insert() 메서드는 배열 내에서 행을 정밀하게 배치할 수 있게 합니다. 이는 전체 구조를 방해하지 않고 새 항목을 특정 위치에 삽입해야 하는 순서가 있는 데이터 세트로 작업할 때 유용합니다.
동적 2D 배열 채우기에 중첩 루프 사용하기
array = []
for i in range(3):
row = []
for j in range(2):
row.append(i * j)
array.append(row)
print(array)
출력:
[[0, 0],
[0, 1],
[0, 2]]
이 메서드는 구조화된 2D 배열을 동적으로 생성하는 데 유용합니다. 중첩 루프를 사용하면 데이터가 채워지는 방식을 완전히 제어할 수 있어, 행렬과 격자 기반 구조를 프로그래밍 방식으로 생성하는 데 이상적입니다.
결론
Python은 2D 배열에 값을 추가하는 여러 가지 방법을 제공합니다. 표준 리스트로 작업하는 경우 append(), extend(), 리스트 컴프리헨션이 효과적인 선택입니다. 고성능 수치 연산의 경우 NumPy의 append(), hstack(), vstack()이 최적화된 솔루션을 제공합니다. 올바른 메서드는 작은 리스트를 다루는지 대규모 수치 데이터를 다루는지에 따라 다릅니다.
메서드 비교
| 메서드 | 적합한 용도 | 유연성 | 성능 |
|---|---|---|---|
append() |
행 추가(Python 리스트) | 높음 | 보통 |
list comprehension |
열 추가(Python 리스트) | 보통 | 높음 |
numpy.append() |
행/열 추가(NumPy) | 높음 | 높음 |
hstack() / vstack() |
행/열을 효율적으로 추가(NumPy) | 높음 | 매우 높음 |
+= 연산자 |
빠른 행 추가(Python 리스트) | 낮음 | 높음 |
extend() |
여러 행 추가(Python 리스트) | 보통 | 높음 |
insert() |
특정 인덱스에 삽입(Python 리스트) | 보통 | 보통 |
| 중첩 루프 | 동적 데이터 생성 | 높음 | 가변적 |