numpy 배열 목록을 단일 numpy 배열로 변환하는 방법은 무엇입니까?
내가 가지고 있다고 가정하십시오;
LIST = [[array([1, 2, 3, 4, 5]), array([1, 2, 3, 4, 5],[1,2,3,4,5])] # inner lists are numpy arrays
나는 개종하려고 노력한다.
array([[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5])
지금은 vstack에서 반복하여 해결하고 있지만 특히 큰 LIST의 경우 정말 느립니다.
가장 효율적인 방법을 위해 무엇을 제안합니까?
일반적으로 모든 축을 따라 배열의 전체 시퀀스를 연결할 수 있습니다.
numpy.concatenate( LIST, axis=0 )
그러나 목록에있는 각 배열의 모양과 차원에 대해 걱정할 필요 가 있습니다 (2 차원 3x5 출력의 경우 모두 2 차원 nx5 배열인지 확인해야합니다). 1 차원 배열을 2 차원 출력의 행으로 연결하려면 차원을 확장해야합니다.
Jorge의 답변이 지적했듯이 stack
numpy 1.10에 도입 된 함수도 있습니다 .
numpy.stack( LIST, axis=0 )
이것은 보완적인 접근 방식을 취합니다. 각 입력 배열의 새 뷰를 만들고 연결하기 전에 추가 차원 (이 경우 왼쪽에 있으므로 각 n
요소 1D 배열이 1x2D 배열이 됨 n
)을 추가합니다. 모든 입력 배열의 모양이 연결 축을 따라도 동일한 경우에만 작동합니다.
vstack
(또는 동등하게 row_stack
)는 1 차원 및 / 또는 2 차원 배열의 시퀀스를 사용하고 전체 목록을 함께 연결하기 전에 필요한 경우에만 자동으로 차원을 확장하므로 사용하기 쉬운 솔루션입니다. 새 차원이 필요한 경우 왼쪽에 추가됩니다. 다시 말하지만, 반복 할 필요없이 전체 목록을 한 번에 연결할 수 있습니다.
numpy.vstack( LIST )
이 유연한 동작은 구문 단축키 numpy.r_[ array1, ...., arrayN ]
(대괄호에주의 )로도 나타납니다 . 이것은 명시 적으로 명명 된 몇 개의 배열을 연결하는 데 유용하지만이 구문은 .NET과 같은 배열 시퀀스를 허용하지 않기 때문에 상황에 좋지 않습니다 LIST
.
수평 (열 단위) 스택과 거의 유사한 함수를위한 유사한 함수 column_stack
와 단축키도 있습니다. 비록 어떤 이유로 후자는 덜 유연합니다 (입력 배열의 차원에 대해 더 엄격하고 연결을 시도합니다.) 1D 배열을 열로 처리하는 대신 종단 간 배열).c_[...]
hstack
마지막으로, 1-D 배열의 수직 스택의 특정 사례에서 다음도 작동합니다.
numpy.array( LIST )
... 배열은 다른 배열의 시퀀스로 구성되어 시작 부분에 새로운 차원을 추가 할 수 있기 때문입니다.
NumPy 버전 1.10부터는 stack 메소드가 있습니다 . 모든 차원 (모두 동일)의 배열을 스택 할 수 있습니다.
# List of arrays.
L = [np.random.randn(5,4,2,5,1,2) for i in range(10)]
# Stack them using axis=0.
M = np.stack(L)
M.shape # == (10,5,4,2,5,1,2)
np.all(M == L) # == True
M = np.stack(L, axis=1)
M.shape # == (5,10,4,2,5,1,2)
np.all(M == L) # == False (Don't Panic)
# This are all true
np.all(M[:,0,:] == L[0]) # == True
all(np.all(M[:,i,:] == L[i]) for i in range(10)) # == True
즐겨,
'Development Tip' 카테고리의 다른 글
비동기 람다를 기다릴 수 없습니다 (0) | 2020.12.01 |
---|---|
Sublime Text 2에 증가하는 숫자 열을 삽입하는 방법은 무엇입니까? (0) | 2020.12.01 |
iOS 11 탐색 모음 높이 사용자 지정 (0) | 2020.12.01 |
사용자 정의 태그에 대한 Eclipse "태그 라이브러리 설명자를 찾을 수 없음"(JSTL이 아님!) (0) | 2020.12.01 |
시뮬레이터에서 푸시 알림을 확인할 수 있습니까? (0) | 2020.12.01 |