Programing

Numpy 배열과 행렬의 차이점은 무엇인가?어떤 걸로 할까?

c10106 2022. 3. 24. 21:31
반응형

Numpy 배열과 행렬의 차이점은 무엇인가?어떤 걸로 할까?

각각의 장점과 단점은 무엇인가?

내가 본 바로는, 필요하다면 둘 중 하나를 다른 하나를 대신해서 일할 수 있으니, 두 가지를 다 쓰도록 귀찮게 해야 할까 아니면 하나만 고집해야 할까?

그 프로그램의 스타일이 내 선택에 영향을 미칠까?나는 numpy를 사용해서 기계 학습을 하고 있어서 실제로 많은 행렬이 있지만 벡터(array)도 많이 있다.

Numpy 행렬은 엄격히 2차원인 반면 Numpy 배열은 N차원이다.매트릭스 객체는 ndarray의 하위 클래스여서 ndarray의 모든 속성과 방법을 상속한다.

의 주요 numpy matrises가 할 수 .a*b매트릭스 제품이야

import numpy as np

a = np.mat('4 3; 2 1')
b = np.mat('1 2; 3 4')
print(a)
# [[4 3]
#  [2 1]]
print(b)
# [[1 2]
#  [3 4]]
print(a*b)
# [[13 20]
#  [ 5  8]]

3.으로, 한국 Python 3.5기 기기로 NumPy를 한다.@연산자, 따라서 당신은 파이톤 >= 3.5에서 ndarray로 매트릭스 곱셈의 동일한 편리함을 얻을 수 있다.

import numpy as np

a = np.array([[4, 3], [2, 1]])
b = np.array([[1, 2], [3, 4]])
print(a@b)
# [[13 20]
#  [ 5  8]]

Ndarray가 ..T전치물을 반환하지만 매트릭스 물체도.H공극이 전치되는 경우.I역으로

이와는 대조적으로, numpy 어레이는 운영이 요소별로 적용된다는 규칙을 일관되게 준수한다(신규 어레이 제외).@운영자(operator.그러므로, 만약a그리고b그렇다면, 배열이 numpy인 것이다.a*b구성 요소를 요소별로 곱하여 배열:

c = np.array([[4, 3], [2, 1]])
d = np.array([[1, 2], [3, 4]])
print(c*d)
# [[4 6]
#  [6 4]]

행렬 곱셈의 결과를 얻으려면np.dot(또는)@위와 같이 파이톤 >= 3.5에서:

print(np.dot(c,d))
# [[13 20]
#  [ 5  8]]

**운영자는 또한 다르게 행동한다:

print(a**2)
# [[22 15]
#  [10  7]]
print(c**2)
# [[16  9]
#  [ 4  1]]

이후a매트릭스,a**2매트릭스 제품을 반품하다a*a부터.이후c 네드어요이(ndarray,c**2각 구성요소를 요소별로 제곱한 ndarray를 반환한다.

np.ravel 항목 선택 선택 시 시 시 스 동 동 동 동 동 동 동 동 동동

numpy 배열의 가장장점은 2차원 행렬보다 일반적이라는 이다.3차원 배열을 원할 때 어떤 일이 일어나는가?그러면 매트릭스 객체가 아니라 ndarray를 사용해야 한다.따라서, 매트릭스 오브젝트 사용법을 배우는 것은 더 많은 작업이다. 매트릭스 오브젝트 작업과 ndarray 작업을 배워야 한다.

매트릭스와 배열을 모두 혼합한 프로그램을 쓰는 것은, 곱셈이 기대하지 않는 것을 반환하지 않도록, 변수가 어떤 유형의 물체인지 추적해야 하기 때문에 여러분의 삶을 힘들게 한다.

이와는 대조적으로, 만약 당신이 ndarray만을 고집한다면, 당신은 매트릭스 물체가 할 수 있는 모든 것, 그리고 약간 다른 기능/공지를 제외하고 더 많은 것을 할 수 있다.

NumPy 매트릭스 제품 표기법(Python >= 3.5에서 Ndarray로 거의 우아하게 달성할 수 있는 것)의 시각적 매력을 기꺼이 포기한다면, NumPy 어레이가 분명히 갈 길이라고 생각한다.

PS. 물론, 다른 하나를 희생하고 선택할 필요는 없다.np.asmatrix그리고np.asarray배열이 2차원인 경우 하나를 다른 것으로 변환할 수 있다.


NumPy의 차이에 대한 개요가 있다.arraysvs NumPymatrixes 여기.

Scipy.org에서 권장하는 어레이:

*'array' 또는 'complete'? 어느 것을 사용해야 할까? - 짧은 대답

배열을 사용하십시오.

  • MATLAB에서 지원되는 다차원 배열 대수 지원
  • 그것들은 NumPy의 표준 벡터/매트릭스/텐서 유형이다.많은 NumPy 함수는 행렬이 아닌 배열을 반환한다.
  • 요소별 연산 및 선형 대수 연산 사이에는 분명한 구분이 있다.
  • 원하는 경우 표준 벡터 또는 행/열 벡터를 사용할 수 있다.

Python 3.5까지 어레이 유형을 사용할 때 유일한 단점은 어레이 유형을 사용해야 한다는 것이었습니다.dot대신에*두 개의 텐서를 곱(수평)한다(수평 제품, 행렬 벡터 곱하기 등).Python 3.5이므로 매트릭스 곱셈을 사용할 수 있다.@교환원의

위와 같은 점을 감안할 때 우리는 이 사실을 부정할 작정이다.matrix종국에는

언우트부 리스트에 한 가지 사례를 추가하기 위해서입니다.

돗자리표나 매트랩과 같은 매트릭스 언어와 비교했을 때, 나에게 있어 가장 큰 실제적인 차이점 중 하나는 치수가 축소 운영에서 보존되지 않는다는 것이다.행렬은 항상 2d인 반면 배열의 평균은 1차원이 적다.

예를 들어 행렬 또는 배열의 행을 축척하는 경우:

매트릭스로

>>> m = np.mat([[1,2],[2,3]])
>>> m
matrix([[1, 2],
        [2, 3]])
>>> mm = m.mean(1)
>>> mm
matrix([[ 1.5],
        [ 2.5]])
>>> mm.shape
(2, 1)
>>> m - mm
matrix([[-0.5,  0.5],
        [-0.5,  0.5]])

정렬하여

>>> a = np.array([[1,2],[2,3]])
>>> a
array([[1, 2],
       [2, 3]])
>>> am = a.mean(1)
>>> am.shape
(2,)
>>> am
array([ 1.5,  2.5])
>>> a - am #wrong
array([[-0.5, -0.5],
       [ 0.5,  0.5]])
>>> a - am[:, np.newaxis]  #right
array([[-0.5,  0.5],
       [-0.5,  0.5]])

나는 또한 어레이와 매트릭스를 혼합하면 많은 "행복한" 디버깅 시간이 생긴다고 생각한다.그러나 scipy.sparse 행렬은 곱셈과 같은 연산자의 관점에서 항상 행렬이다.

공문서에 따르면, 앞으로 매트릭스 클래스가 제거될 것이기 때문에 더 이상 매트릭스 클래스를 사용하는 것은 바람직하지 않다.

https://numpy.org/doc/stable/reference/generated/numpy.matrix.html

다른 답변에서 이미 NumPy 어레이로 모든 작업을 수행할 수 있다고 언급했으므로.

다른 사람들이 언급했듯이, 아마도 가장 큰 장점인 것 같다.matrix그것은 행렬 곱셈을 위한 편리한 표기법을 제공했다는 것이다.

그러나 Python 3.5에는 매트릭스 곱셈을 위한 전용 infix 연산자가 마침내 있다.@.

으로는 최신 NumPy와 할 수 있다ndarrays:

A = numpy.ones((1, 3))
B = numpy.ones((3, 3))
A @ B

그러니 요즘에는 더욱 의심스러울 때, 꼭 지켜야 한다.ndarray.

Numpy 어레이를 사용한 매트릭스 작업:

일부 사용자가 행렬과 숫자 정보를 찾는 데 관심이 있다면, 나는 숫자 배열로 매트릭스 연산에 대한 이 답변을 계속 업데이트하고 싶다.

수락한 대답으로서, numpy-ref.pdf는 다음과 같이 말했다.

수업은 미래에 없어질 것이다.

그래서 이제 매트릭스 대수 연산은 Numpy Arrays로 해야 한다.

a = np.array([[1,3],[-2,4]])
b = np.array([[3,-2],[5,6]]) 

매트릭스 곱하기(인픽스 매트릭스 곱하기)

a@b
array([[18, 16],
       [14, 28]])

전치:

ab = a@b
ab.T       
array([[18, 14],
       [16, 28]])

  

행렬의 역행렬:

np.linalg.inv(ab)
array([[ 0.1       , -0.05714286],
       [-0.05      ,  0.06428571]])      

ab_i=np.linalg.inv(ab) 
ab@ab_i  # proof of inverse
array([[1., 0.],
       [0., 1.]]) # identity matrix 

행렬의 결정 요인.

np.linalg.det(ab)
279.9999999999999

선형 시스템 해결:

1.   x + y = 3,
    x + 2y = -8
b = np.array([3,-8])
a = np.array([[1,1], [1,2]])
x = np.linalg.solve(a,b)
x
array([ 14., -11.])
# Solution x=14, y=-11

고유값 및 고유 벡터:

a = np.array([[10,-18], [6,-11]])
np.linalg.eig(a)
(array([ 1., -2.]), array([[0.89442719, 0.83205029],
        [0.4472136 , 0.5547002 ]])

행렬을 사용하면 내포된 대괄호보다는 텍스트를 통해 쉽게 인스턴스화할 수 있는 장점이 있다.

행렬로 할 수 있다.

np.matrix("1, 1+1j, 0; 0, 1j, 0; 0, 0, 1")

원하는 출력을 직접 얻으십시오.

matrix([[1.+0.j, 1.+1.j, 0.+0.j],
        [0.+0.j, 0.+1.j, 0.+0.j],
        [0.+0.j, 0.+0.j, 1.+0.j]])

어레이를 사용하는 경우 다음과 같이 작동하지 않음:

np.array("1, 1+1j, 0; 0, 1j, 0; 0, 0, 1")

출력:

array('1, 1+1j, 0; 0, 1j, 0; 0, 0, 1', dtype='<U29')

참조URL: https://stackoverflow.com/questions/4151128/what-are-the-differences-between-numpy-arrays-and-matrices-which-one-should-i-u

반응형