2016-12-18 4 views
1

먼저 단순한 예 print(np.bmat(e.tolist())) 또는 print(np.bmat([[a,b],[c,d]])) 결과와 정확히 동일효율적

[[ 1. 1. 2. 2.] 
[ 1. 1. 2. 2.] 
[ 3. 3. 4. 4.] 
[ 3. 3. 4. 4.]] 

생산

import numpy as np 

a = np.ones((2,2)) 
b = 2*np.ones((2,2)) 
c = 3*np.ones((2,2)) 
d = 4*np.ones((2,2)) 
e = np.array([[a,b],[c,d]]) 
print(np.vstack(np.array([np.hstack(e[i,:]) for i in range(2)]))) 

(2D NumPy와 배열의 NumPy와 어레이로부터 블록 NumPy와 배열을 만들기 np.bmat은 캐스팅 할 수있는 numpy 행렬을 만듭니다 (np.asarray() 사용).

그러나 제 문제는 36 개의 큰 숫자 배열을 만드는 코드입니다. (당분간은 400 개 정도 될 것입니다) 2D numpy 배열과 하나의 큰 블록 배열을 만들고 싶습니다. 그들에게서. 이 작업을 효율적으로 수행하고 가능한 경우리스트와 numpy 배열 사이의 변환을 피하는 것이 더 큰 루프 구성의 일부이므로 여러 번 수행됩니다 (배열은 매번 다릅니다). 그게 가능하니?

+0

좋습니다. 어쩌면 명확하지 않을 수 있습니다. 실제로, 간단한 예를 들어 이것은 작동합니다. 하지만 내 진짜 문제는 2D numpy 배열의 큰 numpy 배열을 만들고 목록으로 변환하지 않으려는 것입니다. – ThunderBiggi

+0

36 개의 배열이 있다면 아마도 o/p 배열을 초기화 한 다음 반복적으로 이해하는 것이 좋습니다 o/p 배열로 슬라이스하고 과제를 수행 하시겠습니까? – Divakar

+0

나는 당신이 의미하는 것을 이해하지 못합니다. 배열 수는 가까운 미래에 증가 할 계획 인 매개 변수의 함수이므로 완전 자동이어야합니다. – ThunderBiggi

답변

3
np.swapaxes(e, 1, 2).reshape([4, 4]) 

당신이 요소는 우리의 원하는 출력을 생성 e에서 도출해야하는 순서를 살펴보면 다음 0 reshape 무, 우리가 다음 다음 축 3, 1, 2를 따라 가고 싶은 것을 찾을 수 있습니다 요소를 축 3, 2, 1, 0으로 바꾼다. reshape을 호출하기 전에 축 1과 2를 바꾼다.

+0

이것은 정확히 내가 필요로하는 것입니다. 나는 단지 나의 질문을 편집하려고하고 있었고 나는 변형 된 형태로 시도했지만 효과가없는 것 같았다. – ThunderBiggi