Python: NumPy를 사용한 벡터, 행렬 및 배열

Python Vectors Matrices



이 강의에서는 Python의 NumPy 라이브러리를 사용하여 벡터, 행렬 및 배열을 다루는 몇 가지 깔끔한 팁과 트릭을 살펴보겠습니다. 이 강의는 데이터 과학을 시작하고 이러한 구성 요소에 대한 입문 수학적 개요가 필요하고 코드에서 NumPy를 사용하여 이러한 구성 요소를 사용하는 방법이 필요한 경우 매우 좋은 출발점이 됩니다.

NumPy 라이브러리를 사용하면 벡터, 행렬 및 배열과 같이 기계 학습 및 데이터 과학에서 자주 사용되는 데이터 구조에 대해 수행해야 하는 다양한 작업을 수행할 수 있습니다. 많은 기계 학습 파이프라인에서 사용되는 NumPy로 가장 일반적인 작업만 보여줍니다. 마지막으로 NumPy는 연산을 수행하는 방법일 뿐이므로 NumPy 패키지 자체가 아니라 우리가 보여주는 수학 연산이 이 강의의 주요 초점입니다. 시작하자.







벡터란 무엇입니까?

Google에 따르면 벡터는 방향과 크기가 있는 양입니다. 특히 공간에서 다른 지점에 대한 한 지점의 위치를 ​​결정할 때 그렇습니다.





벡터는 크기뿐만 아니라 특징의 방향도 설명하므로 머신 러닝에서 매우 중요합니다. 다음 코드 스니펫을 사용하여 NumPy에서 벡터를 생성할 수 있습니다.





수입 numpy같이

row_vector = np.array([1,2,])
인쇄(row_vector)

위의 코드 조각에서 행 벡터를 만들었습니다. 다음과 같이 열 벡터를 만들 수도 있습니다.

수입 numpy같이

col_vector = np.array([[1],[2],[]])
인쇄(col_vector)

행렬 만들기

행렬은 단순히 2차원 배열로 이해할 수 있습니다. 다차원 배열을 만들어 NumPy로 행렬을 만들 수 있습니다.



행렬 = np.array([[1,2,],[4,5,6],[7,8,9]])
인쇄(행렬)

행렬은 다차원 배열과 정확히 유사하지만, 행렬 데이터 구조는 권장되지 않습니다. 두 가지 이유 때문에:

  1. NumPy 패키지의 경우 어레이가 표준입니다.
  2. NumPy를 사용한 대부분의 작업은 행렬이 아닌 배열을 반환합니다.

희소 행렬 사용

다시 말해, 희소 행렬은 대부분의 항목이 0인 행렬입니다. 이제 데이터 처리 및 기계 학습의 일반적인 시나리오는 대부분의 요소가 0인 처리 행렬입니다. 예를 들어, 행이 Youtube의 모든 비디오를 설명하고 열이 등록된 각 사용자를 나타내는 행렬을 생각해 보십시오. 각 값은 사용자가 비디오를 시청했는지 여부를 나타냅니다. 물론, 이 행렬의 대부분의 값은 0이 될 것입니다. NS 희소 행렬의 이점 0인 값을 저장하지 않는다는 것입니다. 그 결과 엄청난 계산 이점과 스토리지 최적화도 이루어집니다.

여기에서 스파크 행렬을 만들어 보겠습니다.

scipy 수입 스파스에서

original_matrix = np.array([[1,0,],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(original_matrix)
인쇄(sparse_matrix)

코드 작동 방식을 이해하기 위해 여기에서 출력을 살펴보겠습니다.

위의 코드에서 우리는 NumPy의 함수를 사용하여 압축된 희소 행 0이 아닌 요소가 0부터 시작하는 인덱스를 사용하여 표현되는 행렬입니다. 다음과 같은 다양한 종류의 희소 행렬이 있습니다.

  • 압축된 희소 열
  • 목록 목록
  • 키 사전

우리는 여기에서 다른 희소 행렬에 대해 자세히 다루지 않을 것이지만 각각의 용도가 구체적이고 아무도 '최고'라고 부를 수 없다는 것을 알고 있습니다.

모든 벡터 요소에 연산 적용하기

여러 벡터 요소에 공통 작업을 적용해야 하는 일반적인 시나리오입니다. 이것은 람다를 정의한 다음 이를 벡터화하여 수행할 수 있습니다. 동일한 코드 스니펫을 살펴보겠습니다.

행렬 = np.array([
[1,2,],
[4,5,6],
[7,8,9]])

mul_5 = 람다 x: x* 5
vectorized_mul_5 = np.vectorize(mul_5)

벡터화_mul_5(행렬)

코드 작동 방식을 이해하기 위해 여기에서 출력을 살펴보겠습니다.

위의 코드 스니펫에서는 NumPy 라이브러리의 일부인 vectorize 함수를 사용하여 간단한 람다 정의를 벡터의 모든 요소를 ​​처리할 수 있는 함수로 변환했습니다. vectorize는 요소에 대한 루프 그리고 그것은 프로그램의 성능에 영향을 미치지 않습니다. Numpy는 또한 방송 즉, 위의 복잡한 코드 대신 간단히 다음을 수행할 수 있습니다.

행렬* 5

그리고 결과는 정확히 같았을 것입니다. 복잡한 부분을 먼저 보여주고 싶었습니다. 그렇지 않으면 섹션을 건너 뛰었을 것입니다!

평균, 분산 및 표준 편차

NumPy를 사용하면 벡터에 대한 기술 통계와 관련된 작업을 쉽게 수행할 수 있습니다. 벡터의 평균은 다음과 같이 계산할 수 있습니다.

np.mean(행렬)

벡터의 분산은 다음과 같이 계산할 수 있습니다.

np.var(행렬)

벡터의 표준 편차는 다음과 같이 계산할 수 있습니다.

예: 표준(행렬)

주어진 행렬에 대한 위 명령의 출력은 다음과 같습니다.

행렬 전치

조옮김은 행렬에 둘러싸여 있을 때마다 듣게 될 매우 일반적인 작업입니다. 전치는 행렬의 열 값과 행 값을 바꾸는 방법일 뿐입니다. 참고하세요 벡터는 전치될 수 없습니다 벡터는 행과 열로 분류되지 않은 값의 집합일 뿐입니다. 행 벡터를 열 벡터로 변환하는 것은 전치되지 않는다는 점에 유의하십시오(이 단원의 범위를 벗어나는 선형 대수의 정의를 기반으로 함).

지금은 행렬을 전치함으로써 평화를 찾을 것입니다. NumPy를 사용하여 행렬의 전치에 액세스하는 것은 매우 간단합니다.

매트릭스.T

주어진 행렬에 대한 위 명령의 출력은 다음과 같습니다.

행 벡터에 대해 동일한 작업을 수행하여 열 벡터로 변환할 수 있습니다.

행렬 병합

행렬의 요소를 선형 방식으로 처리하려는 경우 행렬을 1차원 배열로 변환할 수 있습니다. 다음 코드 스니펫을 사용하여 수행할 수 있습니다.

matrix.flatten()

주어진 행렬에 대한 위 명령의 출력은 다음과 같습니다.

평평한 행렬은 1차원 배열이며 단순히 선형입니다.

고유값 및 고유 벡터 계산

고유 벡터는 기계 학습 패키지에서 매우 일반적으로 사용됩니다. 따라서 선형 변환 함수가 행렬로 표시될 때 X, 고유 벡터는 벡터의 크기만 변경되고 방향은 변경되지 않는 벡터입니다. 우리는 다음과 같이 말할 수 있습니다.

Xv = γv

여기서 X는 정방행렬이고 γ는 고유값을 포함합니다. 또한 v는 고유 벡터를 포함합니다. NumPy를 사용하면 고유값과 고유 벡터를 쉽게 계산할 수 있습니다. 다음은 동일한 내용을 보여주는 코드 스니펫입니다.

evalues, evectors = np.linalg.eig(행렬)

주어진 행렬에 대한 위 명령의 출력은 다음과 같습니다.

벡터의 내적

벡터의 내적은 2개의 벡터를 곱하는 방법입니다. 에 대해 알려줍니다. 같은 방향에 있는 벡터의 수 , 반대를 알려주는 외적과 대조적으로, 벡터가 동일한 방향(직교라고 함)에 얼마나 적은지를 알려줍니다. 다음 코드 스니펫에 제공된 대로 두 벡터의 내적을 계산할 수 있습니다.

a = np.array([,5,6])
b = np.array([2. 3,열 다섯,1])

np.dot(에이, ㄴ)

주어진 배열에 대한 위 명령의 출력은 다음과 같습니다.

행렬 더하기, 빼기 및 곱하기

여러 행렬을 더하고 빼는 것은 행렬에서 매우 간단한 작업입니다. 이 작업을 수행할 수 있는 두 가지 방법이 있습니다. 이러한 작업을 수행하는 코드 조각을 살펴보겠습니다. 이것을 단순하게 유지하기 위해 동일한 행렬을 두 번 사용합니다.

np.add(매트릭스, 매트릭스)

다음으로 두 행렬을 다음과 같이 뺄 수 있습니다.

np.빼기(매트릭스, 매트릭스)

주어진 행렬에 대한 위 명령의 출력은 다음과 같습니다.

예상대로 행렬의 각 요소는 해당 요소와 함께 더하거나 뺍니다. 행렬을 곱하는 것은 앞에서 했던 것처럼 내적을 찾는 것과 비슷합니다.

np.dot(매트릭스, 매트릭스)

위의 코드는 다음과 같이 주어진 두 행렬의 실제 곱셈 값을 찾습니다.

행렬*행렬

주어진 행렬에 대한 위 명령의 출력은 다음과 같습니다.

결론

이 수업에서는 데이터 처리, 기술 통계 및 데이터 과학에서 일반적으로 사용되는 벡터, 행렬 및 배열과 관련된 많은 수학적 연산을 살펴보았습니다. 이것은 다양한 개념의 가장 일반적이고 가장 중요한 섹션만을 다루는 빠른 수업이었지만 이러한 작업은 이러한 데이터 구조를 처리하는 동안 수행할 수 있는 모든 작업에 대해 매우 좋은 아이디어를 제공해야 합니다.

Twitter에서 수업에 대한 피드백을 자유롭게 공유하십시오. @linuxhint 그리고 @sbmaggarwal (그게 나야!).