[python] NumPy 배열 전치

Python과 NumPy를 사용하고 “transpose”에 몇 가지 문제가 있습니다.

import numpy as np
a = np.array([5,4])
print(a)
print(a.T)

호출 a.T은 배열을 바꾸지 않습니다. 경우 a, 예를 들면 [[],[]]다음 올바르게 이항,하지만 난의 전치이 필요합니다 [...,...,...].



답변

예상대로 정확하게 작동합니다. 1D 배열 의 조옮김 은 여전히 1D 배열입니다! matlab에 익숙한 경우 기본적으로 1D 배열 개념이 없습니다. Matlab의 “1D”배열은 2D입니다.

1D 벡터를 2D 배열로 변환 한 다음 전치하려면 벡터를 슬라이스하십시오 np.newaxis(또는 None동일하며 newaxis더 읽기 쉽습니다).

import numpy as np
a = np.array([5,4])[np.newaxis]
print(a)
print(a.T)

그러나 일반적으로 이것에 대해 걱정할 필요가 없습니다. 습관을 들이지 않고 추가 차원을 추가하는 것은 일반적으로 원하는 것이 아닙니다. Numpy는 다양한 계산을 수행 할 때 1D 배열을 자동으로 브로드 캐스트합니다. 행 벡터 및 열 벡터를 구별 할 필요는 일반적으로 없다 (어느 것도 없습니다 벡터 . 그들은 모두 2D이야!) 당신은 그냥 벡터를 할 때.


답변

하나 대신 두 개의 괄호 쌍을 사용하십시오. 이렇게하면 하나의 대괄호 쌍을 사용하는 경우 생성 한 1D 배열과 달리 2D 배열이 바뀔 수 있습니다.

import numpy as np    
a = np.array([[5, 4]])
a.T

보다 철저한 예 :

>>> a = [3,6,9]
>>> b = np.array(a)
>>> b.T
array([3, 6, 9])         #Here it didn't transpose because 'a' is 1 dimensional
>>> b = np.array([a])
>>> b.T
array([[3],              #Here it did transpose because a is 2 dimensional
       [6],
       [9]])

numpy의 shape방법을 사용 하여 여기에서 무슨 일이 일어나고 있는지 확인하십시오.

>>> b = np.array([10,20,30])
>>> b.shape
(3,)
>>> b = np.array([[10,20,30]])
>>> b.shape
(1, 3)


답변

1D 배열의 경우 :

a = np.array([1, 2, 3, 4])
a = a.reshape((-1, 1)) # <--- THIS IS IT

print a
array([[1],
       [2],
       [3],
       [4]])

여기서 -1이 “필요한만큼 많은 행”을 의미한다는 것을 이해하면 이것이 배열을 “전치”하는 가장 읽기 쉬운 방법이라는 것을 알았습니다. 배열의 차원이 더 높은 경우을 사용하십시오 a.T.


답변

여분의 대괄호 세트로 래핑하여 기존 벡터를 행렬로 변환 할 수 있습니다.

from numpy import *
v=array([5,4]) ## create a numpy vector
array([v]).T ## transpose a vector into a matrix

numpy에는 matrix클래스가 있습니다 ( 배열 대 행렬 참조 ) …

matrix(v).T ## transpose a vector into a matrix


답변

numpy 1D 배열-> 열 / 행 행렬 :

>>> a=np.array([1,2,4])
>>> a[:, None]    # col
array([[1],
       [2],
       [4]])
>>> a[None, :]    # row, or faster `a[None]`
array([[1, 2, 4]])

@ joe-kington이 말했듯 이 가독성 Nonenp.newaxis위해 대체 할 수 있습니다 .


답변

1d 배열을 2d 열로 ‘전치’하려면 다음을 사용할 수 있습니다 numpy.vstack.

>>> numpy.vstack(numpy.array([1,2,3]))
array([[1],
       [2],
       [3]])

또한 바닐라 목록에서도 작동합니다.

>>> numpy.vstack([1,2,3])
array([[1],
       [2],
       [3]])


답변

2D 배열 만 조옮김 할 수 있습니다. numpy.matrix2D 배열을 만드는 데 사용할 수 있습니다 . 이것은 3 년 늦었지만 가능한 해결책 세트에 추가하고 있습니다.

import numpy as np
m = np.matrix([2, 3])
m.T