Pandas의 행렬 곱셈
행렬 곱셈은 무엇보다도 네트워크 관계, 좌표계 변환, 숫자 모델링 및 재고 계산을 이해하는 데 널리 사용됩니다. 행-열
기반 수치 데이터를 사용하여 행렬 곱셈을 수행하고 적용 가능한 모든 영역에서 결과를 사용할 수 있습니다.
Pandas와 Numpy에는 곱셈, 반전 등과 같은 행렬 사용 및 연산을 가능하게 하는 도구와 기능이 있습니다. Pandas의 행렬 곱셈은 기본 수학을 모르면 다소 혼란스러울 수 있으며 오류가 발생할 수 있습니다.
이 기사에서는 pandas에서 행렬 곱셈을 수행하는 방법과 오류를 피하는 방법에 대해 설명합니다.
행렬의 곱셈
행렬의 곱셈을 수행하려면 관련된 두 행렬이 연산에 맞게 정렬(또는 적절)되도록 해야 합니다. 행렬에는 행과 열이 있습니다. 2개의 행렬을 곱하려는 경우 가능하려면 열과 행의 수가 중요합니다.
행렬을 행
과 열
로 설명합니다. 예를 들어 2 x 4
행렬에는 2
행과 4
열이 있습니다. 이 모든 정보와 함께 행렬 곱셈이 가능하려면 첫 번째 행렬(왼쪽 행렬)의 열 수가 두 번째 행렬(오른쪽 행렬)의 행 수와 같아야 합니다.
따라서 첫 번째 행렬에는 3개의 열이 있고 두 번째 행렬에는 3개의 행이 있기 때문에 2 x 3
행렬에 3 x 2
를 곱할 수 있습니다. 또한 첫 번째 행렬의 열 수가 두 번째 행렬의 행 수인 4
와 같기 때문에 3 x 4
행렬에 4 x 23
행렬을 곱할 수 있습니다.
그러나 어떤 행렬이 먼저인지 변경(또는 반전)하면 행렬 곱셈이 불가능할 수 있습니다. 이전과 동일한 예를 사용하여 첫 번째 열의 열 수가 두 번째 행렬의 행 수와 같기 때문에 3 x 2
행렬에 2 x 3
행렬을 곱할 수 있습니다.
두 번째 예의 경우 4 x 23
행렬에 3 x 4
행렬을 곱할 수 있습니다. 첫 번째 행렬의 열 수(23
)가 행 수(3
)와 같지 않기 때문입니다. 두 번째 매트릭스의
Pandas에서 DataFrame이 정렬되어 있는지 확인
데이터 프레임(행렬)의 모양이 행렬 곱셈에 대해 명시된 규칙에 맞는지 확인하여 가지고 있는 데이터 프레임이 행렬 연산을 수행할 수 있는지 확인할 수 있습니다. 이를 달성하기 위해 데이터 프레임의 shape
속성(두 요소가 있는 튜플)에 액세스하고 첫 번째 데이터 프레임(매트릭스)의 열 값(튜플 내의 두 번째 값)을 행 값(첫 번째 값)과 비교합니다. 두 번째 데이터 프레임(매트릭스)에 대한 튜플 내).
df
와 other
라는 두 개의 데이터 프레임을 만들고 모양을 확인하고 비교해 봅시다.
암호:
import pandas as pd
import numpy as np
df = pd.DataFrame([[23, 33], [33, 41]])
other = pd.DataFrame([[31, 0], [20, 1]])
print(df)
print(other)
출력:
0 1
0 23 33
1 33 41
0 1
0 31 0
1 20 1
이제 모양을 확인하고 데이터 프레임이 행렬 곱셈 계산을 수행할 수 있는지 비교해 봅시다.
print(df.shape)
print(other.shape)
if df.shape[1] == other.shape[0]:
print("DataFrames (matrices) align and therefore matrix multiplication possible.")
else:
print(
"DataFrames (matrices) don't align and therefore matrix multiplication not possible."
)
출력:
(2, 2)
(2, 2)
DataFrames (matrices) align and therefore matrix multiplication is possible.
보시다시피 df
의 열 수가 other
의 행과 같기 때문에 데이터 프레임이 정렬됩니다. 이제 행렬 곱셈을 위해 설계된 함수 dot()
를 사용할 수 있습니다.
도트
기능을 사용하여 Pandas에서 행렬 곱셈 수행
Pandas와 Numpy에는 행렬 곱셈에 사용할 수 있는 dot()
함수가 있습니다. 행렬 곱셈을 수행하는 방법을 보여주기 위해 두 가지를 모두 사용할 것입니다.
이전 섹션에서 생성한 데이터 프레임을 사용하여 dot()
함수를 사용하는 방법을 설명할 수 있습니다. df
및 other
의 행렬 곱셈에 대해 알아봅시다.
pandas dot()
함수를 사용하여 함수가 첫 번째 행렬인 df
에 적용되고 두 번째 행렬인 other
가 아래와 같이 dot()
함수에 인수로 전달됩니다.
print(df.dot(other))
출력:
0 1
0 1373 33
1 1843 41
numpy dot
() 함수를 사용하려면 두 개의 인수(두 개의 행렬)를 전달하지만 첫 번째 행렬이 먼저 전달됩니다.
print(np.dot(df, other))
출력:
[[1373 33]
[1843 41]]
numpy
라이브러리를 사용하여 임의로 생성된 df1
및 df2
라는 또 다른 두 개의 데이터 프레임으로 작업하고 두 dot()
함수를 사용하여 행렬 곱셈을 수행해 보겠습니다.
암호:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(3, 3), columns=list("ABC"), index=[1, 2, 3])
df2 = pd.DataFrame(np.random.randn(3, 3), columns=list("ABC"), index=[1, 2, 3])
print(np.dot(df1, df2))
print(df1.dot(df2))
출력:
[[ 1.28220783 -1.36789201 0.16335459]
[-0.8039172 0.87851003 -0.32282877]
[ 1.09767978 -0.71870817 -0.23485835]]
-----
...
ValueError: matrices are not aligned
numpy
라이브러리를 사용하는 첫 번째 dot()
함수는 오류 없이 작동했지만 pandas
라이브러리를 사용하는 두 번째 dot()
함수는 ValueError: 행렬이 정렬되지 않음
오류 메시지를 제공하지 않았습니다.
이 오류 메시지가 나타나는 이유는 pandas dot
() 함수가 실행될 때 df1
및 df2
를 다시 인덱싱하여 df1
의 열 순서와 의 행(인덱스) 순서가 df2
가 일치하지 않아 행렬이 잘못 정렬됩니다. Numpy dot()
함수는 많은 작업을 수행하지 않으며 오류가 없습니다.
이 오류를 처리하려면 두 번째 데이터 프레임(df2
)의 인덱스를 첫 번째 데이터 프레임(df1
)의 열에 할당하여 두 데이터 프레임을 정렬해야 합니다.
암호:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randn(3, 3), columns=list("ABC"), index=[1, 2, 3])
df2 = pd.DataFrame(np.random.randn(3, 3), columns=list("ABC"), index=[1, 2, 3])
print(np.dot(df1, df2))
df2.index = df1.columns
print(df1.dot(df2))
출력:
[[ 1.28220783 -1.36789201 0.16335459]
[-0.8039172 0.87851003 -0.32282877]
[ 1.09767978 -0.71870817 -0.23485835]]
A B C
1 1.282208 -1.367892 0.163355
2 -0.803917 0.878510 -0.322829
3 1.097680 -0.718708 -0.234858
이제 우리는 오류가 없으며 두 행렬 곱셈 계산은 상관없이 작동합니다.
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn