답변:
예상대로 정확하게 작동합니다. 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이야!) 당신은 그냥 벡터를 할 때.
np.arange
1D 배열을 빠르게 만들었습니다. 에 대해 정확히 동일하게 작동합니다 a = np.array([5,4])
.
()
는 numpy의 추가 치수를 나타내지 않습니다. 경우 a = np.arange(10)
다음 a
되는 array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
등 생산 a.__repr__()
. a.ndim --> 1
대괄호로 표시되는 1 차원 (즉 ) 벡터 []
입니다. 은 array( ... )
당신이 중 하나를 수행 할 때 볼 수 없습니다 print(a)
나 a.__str__()
.
np.vstack()
작업이 더 명시 적으로 보입니다 print np.vstack(a)
.
하나 대신 두 개의 괄호 쌍을 사용하십시오. 이렇게하면 하나의 대괄호 쌍을 사용하는 경우 생성 한 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
.
transpose
와 reshape
다른 방법으로 배열을 수정 (생성 화상 형상은 동일하지만, 소자는 다르게 배치된다).
1d 배열을 2d 열로 '전치'하려면 다음을 사용할 수 있습니다 numpy.vstack
.
>>> numpy.vstack(numpy.array([1,2,3]))
array([[1],
[2],
[3]])
또한 바닐라 목록에서도 작동합니다.
>>> numpy.vstack([1,2,3])
array([[1],
[2],
[3]])
vstack
? np.concatenate([atleast_2d(_m) for _m in tup], 0)
. 그것은 배열을 (1,1) 배열로 나누고 그것들을 연결합니다! 이 과정에서 복사본이 만들어지고 모든 모양이 바뀌는 것이 보입니다.
2D 배열 만 조옮김 할 수 있습니다. numpy.matrix
2D 배열을 만드는 데 사용할 수 있습니다 . 이것은 3 년 늦었지만 가능한 해결책 세트에 추가하고 있습니다.
import numpy as np
m = np.matrix([2, 3])
m.T
np.matrix
필요하지 않으며 일반적으로 사용하지 않는 것이 좋습니다.
의 전치
x = [[0 1],
[2 3]]
이다
xT = [[0 2],
[1 3]]
잘 코드는 다음과 같습니다
x = array([[0, 1],[2, 3]]);
np.transpose(x)
자세한 내용은 다음 링크를 참조하십시오.
http://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html
위의 게시물을 통합하고 있습니다. 다른 사람들이 시간을 절약하는 데 도움이되기를 바랍니다.
아래 배열에는 (2, )
차원이 있으며 1 차원 배열입니다.
b_new = np.array([2j, 3j])
1D 배열을 바꾸는 방법에는 두 가지가 있습니다.
"np.newaxis"로 슬라이스하거나 없음
print(b_new[np.newaxis].T.shape)
print(b_new[None].T.shape)
다른 작문 방법, 위의 T
작업 없이 !
print(b_new[:, np.newaxis].shape)
print(b_new[:, None].shape)
[]를 감싸거나 np.matrix를 사용하면 새로운 차원을 추가 할 수 있습니다.!
print(np.array([b_new]).T.shape)
print(np.matrix(b_new).T.shape)
의 함수 이름 numpy
은 column_stack 입니다.
>>>a=np.array([5,4])
>>>np.column_stack(a)
array([[5, 4]])
에있어서, 상기의 답변에 설명하지만, 설명되지 않은이 문서 위한 numpy.ndarray.transpose
방법은 :
1 차원 배열의 경우, 조옮김 벡터는 단순히 동일한 벡터이므로 효과가 없습니다. 1 차원 배열을 2 차원 열 벡터로 변환하려면 추가 차원을 추가해야합니다. np.atleast2d (a) .T는 a [:, np.newaxis]와 같이 이것을 달성합니다.
할 수있는 일 :
import numpy as np
a = np.array([5,4])
print(a)
print(np.atleast_2d(a).T)
사용하는 것보다 어떤 (imo)가 더 낫습니다 newaxis
.
기본적으로 조옮김 함수는 배열의 모양과 보폭을 바꾸는 것입니다.
>>> a = np.ones((1,2,3))
>>> a.shape
(1, 2, 3)
>>> a.T.shape
(3, 2, 1)
>>> a.strides
(48, 24, 8)
>>> a.T.strides
(8, 24, 48)
1D numpy array (rank-1 array)의 경우 모양과 보폭은 1 요소 튜플이며 바꿀 수 없으며 이러한 1D 배열의 조옮김은 변경되지 않은 상태로 반환합니다. 대신, "행-벡터"(숫자 배열의 배열 (1, n)
)를 "열-벡터"(숫자 배열의 배열)로 바꿀 수 있습니다 (n, 1)
. 이를 위해서는 먼저 1D numpy 배열을 행 벡터로 변환 한 다음 모양과 보폭을 바꾸어야합니다 (조옮김). 다음은이를 수행하는 기능입니다.
from numpy.lib.stride_tricks import as_strided
def transpose(a):
a = np.atleast_2d(a)
return as_strided(a, shape=a.shape[::-1], strides=a.strides[::-1])
예:
>>> a = np.arange(3)
>>> a
array([0, 1, 2])
>>> transpose(a)
array([[0],
[1],
[2]])
>>> a = np.arange(1, 7).reshape(2,3)
>>> a
array([[1, 2, 3],
[4, 5, 6]])
>>> transpose(a)
array([[1, 4],
[2, 5],
[3, 6]])
물론 1D 배열을 가지고 있기 때문에 이런 식으로 할 필요가 없으며 또는 로 (n, 1)
배열을 직접 배열 로 바꿀 수 있습니다 . 방금 전치 배열이 어떻게 작동하는지 보여주고 싶었습니다.a.reshape((-1, 1))
a[:, None]
지금까지 1D 배열에 대해 작고 읽기 쉬운 방식으로 구현하는 방법을 배웠습니다.
h = np.array([1,2,3,4,5])
v1 = np.vstack(h)
v2 = np.c_[h]
h1 = np.hstack(v1)
h2 = np.r_[v2[:,0]]
numpy.r_ 및 numpy.c_ 는 슬라이스 객체를 각각 첫 번째 축과 두 번째 축을 따라 연결 하도록 변환합니다. 따라서 수직 배열 v2를 수평 배열 h2로 다시 변환 할 때 슬라이싱 v2 [:, 0]
numpy.vstack 은 (N,) 모양의 1 차원 배열이 (1, N)으로 재구성 된 후 첫 번째 축을 따라 연결하는 것과 같습니다. vsplit 으로 나눈 배열을 다시 작성합니다.