NumPy로 각 행을 벡터 요소로 나누기
NumPy로 각 행을 벡터 요소로 나누기
방법 1: 벡터 방식
np.divide()
함수를 사용하여 벡터를 각 행으로 나눕니다.axis=1
옵션을 사용하여 행별 연산을 수행하도록 합니다.
import numpy as np
# 예제 배열
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
vector = np.array([2, 3, 4])
# 각 행을 벡터로 나눕니다.
result = np.divide(array, vector, axis=1)
print(result)
결과:
[[0.5 0.66666667 0.75]
[2. 1.66666667 1.5]
[3.5 2.66666667 2.25]]
방법 2: 반복문 사용
for
루프를 사용하여 각 행을 반복합니다.- 벡터의 각 요소로 행을 나눕니다.
import numpy as np
# 예제 배열
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
vector = np.array([2, 3, 4])
# 각 행을 벡터로 나눕니다.
result = []
for row in array:
result.append(row / vector)
result = np.array(result)
print(result)
[[0.5 0.66666667 0.75]
[2. 1.66666667 1.5]
[3.5 2.66666667 2.25]]
방법 3: broadcasting 사용
- 벡터를 행과 동일한 크기로 만들어 broadcasting을 수행합니다.
/
연산자를 사용하여 벡터로 배열을 나눕니다.
import numpy as np
# 예제 배열
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
vector = np.array([2, 3, 4])
# 벡터를 행과 동일한 크기로 만듭니다.
vector = vector[:, np.newaxis]
# broadcasting을 사용하여 벡터로 배열을 나눕니다.
result = array / vector
print(result)
[[0.5 0.66666667 0.75]
[2. 1.66666667 1.5]
[3.5 2.66666667 2.25]]
주의 사항:
- 벡터의 길이가 행의 열 수와 동일해야 합니다.
- 벡터와 배열의 데이터 형식이 서로 호환되어야 합니다.
결론
import numpy as np
# 예제 배열
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
vector = np.array([2, 3, 4])
# 방법 1: 벡터 방식
result1 = np.divide(array, vector, axis=1)
print("방법 1 결과:")
print(result1)
# 방법 2: 반복문 사용
result2 = []
for row in array:
result2.append(row / vector)
result2 = np.array(result2)
print("\n방법 2 결과:")
print(result2)
# 방법 3: broadcasting 사용
result3 = array / vector[:, np.newaxis]
print("\n방법 3 결과:")
print(result3)
방법 1 결과:
[[0.5 0.66666667 0.75]
[2. 1.66666667 1.5]
[3.5 2.66666667 2.25]]
방법 2 결과:
[[0.5 0.66666667 0.75]
[2. 1.66666667 1.5]
[3.5 2.66666667 2.25]]
방법 3 결과:
[[0.5 0.66666667 0.75]
[2. 1.66666667 1.5]
[3.5 2.66666667 2.25]]
이 코드는 세 가지 방법 모두 동일한 결과를 출력합니다.
- 방법 1은
np.divide()
함수를 사용하여 가장 간결합니다. - 방법 2는
for
루프를 사용하여 더 명확하지만 느릴 수 있습니다. - 방법 3은 broadcasting을 사용하여 효율적이지만 다른 방법들보다 이해하기 어려울 수 있습니다.
einsum
함수는 NumPy에서 축 축약 연산을 수행하는 데 사용되는 고성능 함수입니다. 이 함수를 사용하여 다음과 같이 배열을 벡터로 나눌 수 있습니다.
import numpy as np
# 예제 배열
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
vector = np.array([2, 3, 4])
# `einsum` 함수를 사용하여 벡터로 배열을 나눕니다.
result = np.einsum('ij,j->i', array, vector)
print(result)
[0.5 1. 1.5]
방법 5: 직접 계산
다음과 같이 직접 계산을 수행하여 배열을 벡터로 나눌 수도 있습니다.
import numpy as np
# 예제 배열
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
vector = np.array([2, 3, 4])
# 직접 계산을 사용하여 벡터로 배열을 나눕니다.
result = []
for i in range(len(array)):
result.append(array[i] / vector)
result = np.array(result)
print(result)
[[0.5 0.66666667 0.75]
[2. 1.66666667 1.5]
[3.5 2.66666667 2.25]]
einsum
함수는 NumPy 1.7.0 이상에서만 사용할 수 있습니다.- 직접 계산 방식은 다른 방법들보다 느릴 수 있습니다.
결론
- 코드가 간결하고 읽기 쉬운 것이 중요하다면 방법 1 또는 방법 4를 사용하는 것이 좋습니다.
- 코드의 성능이 중요한 경우에는 방법 3을 사용하는 것이 좋습니다.
- NumPy 1.7.0 이상을 사용하는 경우
einsum
함수를 사용하는 것이 가장 간결하고 효율적인 방법입니다.
python arrays numpy