나는 ndarray
에있는 transpose
이 matlab의 permute
함수와 동등한 것으로 알고 있지만 간단히 작동하지 않는 특정 유스 케이스가 있음을 이해합니다.순열과 함께 파이썬에서 방송
C = @bsxfun(@times, permute(A,[4,2,5,1,3]), permute(B, [1,6,2,7,3,4,5])
모양 NxNxMxPxP의 5D 텐서이다 매트랩 I는 다음이있다. 위의 함수는 루프 된 크로네 커 생성물을 벡터화하기위한 것입니다. 나는 Matlab이 A와 B 둘 다에 대해 2 개의 싱글 튼 디멘션을 추가하고 있다고 가정하고 있는데, 이는 왜 그것들을 재정렬 할 수 있는지에 대한 것이다. 이 코드를 파이썬
에 이식하는 방법을 찾고 있습니다.하지만이 추가 차원을 추가 할 수있는 능력이 없다고 생각합니다.
. 나는 this 성공적으로 추가 치수를 추가하지만 방송은 동일한 matlab의 bsxfun
을 작동하지 않는 것을 발견했습니다.
A = A[...,None,None]
B = B[...,None,None]
C = transpose(A,[3,1,4,0,2])*transpose(B,[0,5,1,6,2,3,4])
나는 다음과 같은 오류 얻을 : 나는 명백한 번역을 시도 (예 나는이
ndarray
's 및 기능 NumPy와 사용하고 있습니다)
return transpose(axes)
ValueError: axes don't match array
내 첫번째 추측은을하는 것입니다 A와 B에
reshape
을 추가하면 싱글 톤 차원에 추가됩니까?
지금 다음 오류 얻을 :
mults = transpose(rho_in,[3,1,4,0,2])*transpose(proj,[0,5,1,6,2,3,4])
ValueError: operands could not be broadcast together with shapes (1,9,1,9,8) (9,1,9,1,8,40,40)
편집 : 올바르게 파이썬이 matlab에 곱셈을 방송에 대한 단일 차원을 추가하는 방법에 대한 덜하지만 더로 내 질문에 개정.
이 주제 (특히 'einsum'의 사용)를 확장하기 위해 어떤 종류의 직접적인 메시지로 연락 할 수 있습니까? 나는 나의 미래의 질문이 여기에 관련이 있기에 너무 구체적 일 것 같다. –
@Mike 불행히도 Stack Overflow는 오프 사이트 노력을 분명히 낙담합니다 :) 주제에 대한 우려를 볼 수 있지만 여기에 의견을 남기거나 (매우 밀접하게 관련되어 있고 간단하다면) 새로운 질문을하십시오 (보이는 경우 충분히 큰 질문을 할만 큼) 또는 [MATLAB 회의실] (http://chat.stackoverflow.com/rooms/81987/chatlab-and-talktave) 또는 [python one] (http : //chat.stackoverflow.com/rooms/6/python). –
아마도 permute (A ...)의'(2,1,3)'때문에'np.einsum ('ijk, lmkno-> ljmikno', A, B)이어야할까요? – Divakar