NumPy 배열 vs. 행렬: 차이점과 선택 가이드
NumPy 배열과 행렬의 차이점 및 선택 가이드
배열 vs. 행렬:
-
배열:
- 다차원 데이터 구조를 나타냅니다.
- 0보다 크거나 같은 임의의 차원을 가질 수 있습니다.
- 데이터는 동일한 데이터 타입으로 구성됩니다.
- 일반적으로 다양한 데이터를 저장하는 데 사용됩니다.
-
행렬:
- 2차원 배열입니다.
- 행과 열로 구성됩니다.
- 선형 대수 연산에 최적화되어 있습니다.
- 행렬 곱셈, 역행렬 계산 등에 사용됩니다.
선택 가이드:
-
배열 사용 시:
- 다차원 데이터를 저장하고 처리해야 할 때
- 행렬 연산이 필요하지 않을 때
- 데이터 형식이 다양할 때
-
- 2차원 데이터를 저장하고 처리해야 할 때
- 행렬 연산이 필요할 때
- 데이터 형식이 일관될 때
코드 예시:
import numpy as np
# 배열 생성
array = np.array([1, 2, 3, 4, 5])
print(array) # 출력: [1 2 3 4 5]
# 행렬 생성
matrix = np.array([[1, 2], [3, 4]])
print(matrix) # 출력: [[1 2]
[3 4]]
# 행렬 곱셈
result = np.dot(matrix, matrix)
print(result) # 출력: [[7 10]
[15 22]]
결론:
NumPy 배열과 행렬은 각자 다양한 장점을 가지고 있습니다. 데이터의 특성과 수행하려는 작업에 따라 적절한 데이터 구조를 선택해야 합니다.
- 데이터 차원과 형식: 배열은 다양한 차원과 데이터 형식을 지원하는 반면, 행렬은 2차원이며 데이터 형식이 일관되어야 합니다.
- 수행 작업: 행렬 연산이 필요한 경우 행렬을 사용하는 것이 효율적입니다.
NumPy 배열과 행렬 활용 예제 코드
배열 생성 및 활용:
import numpy as np
# 1차원 배열 생성
array_1d = np.array([1, 2, 3, 4, 5])
# 2차원 배열 생성
array_2d = np.array([[1, 2, 3], [4, 5, 6]])
# 3차원 배열 생성
array_3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
# 특정 원소 접근
print(array_1d[2]) # 출력: 3
print(array_2d[1, 0]) # 출력: 4
print(array_3d[0, 1, 2]) # 출력: 6
# 배열 슬라이싱
print(array_1d[1:4]) # 출력: [2 3 4]
print(array_2d[:, 1:]) # 출력: [[2 3] [5 6]]
print(array_3d[1:, :, :2]) # 출력: [[[7 8] [10 11]]]
# 배열 형상 변경
print(array_1d.reshape(2, 2)) # 출력: [[1 2]
[3 4]]
print(array_2d.flatten()) # 출력: [1 2 3 4 5 6]
import numpy as np
# 행렬 생성
matrix = np.array([[1, 2, 3], [4, 5, 6]])
# 행렬 전치행렬
print(matrix.T) # 출력: [[1 4]
[2 5]
[3 6]]
# 행렬 덧셈
matrix1 = np.array([[1, 2, 3], [4, 5, 6]])
matrix2 = np.array([[7, 8, 9], [10, 11, 12]])
print(matrix1 + matrix2) # 출력: [[ 8 10 12]
[14 16 18]]
# 행렬 곱셈
matrix3 = np.array([[1, 2], [3, 4]])
print(np.dot(matrix, matrix3)) # 출력: [[ 7 10]
[15 22]]
# 행렬 역행렬
print(np.linalg.inv(matrix)) # 출력: [[-0.5 0.5]
[ 0.33333333 0.66666667]]
# 고유치값 및 고유벡터
print(np.linalg.eig(matrix)) # 출력: (array([[1.82842712e+00 1.17157288e-01],
[0.00000000e+00 0.00000000e+00]]),
array([[ 0.57735026 0.81649658]
[-0.81649658 0.57735026]]))
통계 연산:
import numpy as np
# 데이터 배열 생성
data = np.array([10, 20, 30, 40, 50])
# 평균 계산
print(np.mean(data)) # 출력: 30.0
# 표준 편차 계산
print(np.std(data)) # 출력: 15.811388300841898
# 최소값 및 최대값
print(np.min(data)) # 출력: 10
print(np.max(data)) # 출력: 50
# 합계 계산
print(np.sum(data)) #
NumPy 배열과 행렬 대체 방법
Pandas:
- Pandas는 데이터 분석 및 조작을 위한 라이브러리입니다.
- DataFrames를 사용하여 행과 열로 구성된 데이터를 효율적으로 저장하고 관리할 수 있습니다.
- 특히, 결측치 처리, 데이터 정제, 통계 분석 등에 유용합니다.
예시:
import pandas as pd
# 데이터 리스트 생성
data = [{"name": "Alice", "age": 30, "city": "Seattle"},
{"name": "Bob", "age": 25, "city": "San Francisco"},
{"name": "Charlie", "age": 32, "city": "New York"}]
# DataFrame으로 변환
df = pd.DataFrame(data)
# 특정 열에 대한 평균 계산
print(df["age"].mean()) # 출력: 29.0
# 특정 조건에 맞는 데이터 추출
filtered_df = df[df["age"] > 30]
print(filtered_df) # 출력: name age city
0 Alice 30 Seattle
2 Charlie 32 New York
SciPy:
- SciPy는 NumPy를 보완하는 다양한 과학 계산 함수를 제공합니다.
- 특히, 통계, 최적화, 적분, 미분 방정식 해석 등에 강력한 기능을 제공합니다.
import scipy.stats as stats
# 데이터 리스트 생성
data = [10, 20, 30, 40, 50]
# T 검정 수행
t_statistic, p_value = stats.ttest_ind(data[:2], data[2:])
print("t-statistic:", t_statistic) # 출력: t-statistic: 2.0
print("p-value:", p_value) # 출력: p-value: 0.076
# 감마 분포에서 샘플링
samples = stats.gamma.rvs(alpha=2, loc=0, scale=1, size=100)
print(samples) # 출력: [1.20592922 0.42423658 2.02079897 ... 0.95014544 0.80198237]
Matplotlib:
- Matplotlib는 데이터 시각화를 위한 라이브러리입니다.
- 다양한 차트, 그래프, 히스토그램 등을 생성하여 데이터를 시각적으로 표현할 수 있습니다.
import matplotlib.pyplot as plt
import numpy as np
# 데이터 생성
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 선 그래프 생성
plt.plot(x, y)
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Sin Curve")
plt.show()
TensorFlow/PyTorch:
- TensorFlow와 PyTorch는 머신러닝 및 딥러닝 프레임워크입니다.
- 신경망 모델 학습 및 평가를 위한 강력한 기능을 제공합니다.
- NumPy 배열을 기반으로 데이터를 처리하고 모델에 입력으로 사용할 수 있습니다.
import tensorflow as tf
# 데이터 생성
x_data = np.array([[1, 2], [3, 4], [5, 6]])
y_data = np.array([3, 5, 7])
# 모델 정의
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, activation='linear', input_shape=(2,))
])
# 모델 학습
model.compile(loss='mse', optimizer='adam')
model.fit(x_data, y_data, epochs=100)
# 예측
new_data = np.array([[7, 8]])
prediction = model.predict(new_data)
python arrays matrix