Mam dwie tablice A
i B
o nieznanych wymiarach, które chcę połączyć wzdłuż wymiaru N
. Na przykład:Łączenie niewidocznych tablic o nieznanym wymiarze na osi arbitralnej
>>> A = rand(2,2) # just for illustration, dimensions should be unknown
>>> B = rand(2,2) # idem
>>> N = 5
>>> C = concatenate((A, B), axis=N)
numpy.core._internal.AxisError: axis 5 is out of bounds for array of dimension 2
>>> C = stack((A, B), axis=N)
numpy.core._internal.AxisError: axis 5 is out of bounds for array of dimension 3
Powiązane pytanie jest zadawane here. Niestety, proponowane rozwiązania nie działają, gdy wymiary są nieznane i konieczne może być dodanie kilku nowych osi do uzyskania minimalnego wymiaru N
.
Co mam zrobić jest rozszerzenie kształt z 1-aż do N
tego wymiaru, a następnie złączyć:
newshapeA = A.shape + (1,) * (N + 1 - A.ndim)
newshapeB = B.shape + (1,) * (N + 1 - B.ndim)
concatenate((A.reshape(newshapeA), B.reshape(newshapeB)), axis=N)
Z tym kodem powinienem móc łączyć a (2,2,1,3) z tablicą (2,2) wzdłuż osi 3, na przykład.
Czy istnieją lepsze sposoby osiągnięcia tego celu?
ps: zaktualizowano jako sugerowaną pierwszą odpowiedź.
Dziękujemy! tak jest dużo lepiej. Mimo to szukałem jakiegoś rozwiązania, unikając wyraźnej konstrukcji nowych kształtów. 'vstack' i' dstack' robią to, co chcę, tylko dla macierzy 2d i 3d. – Miguel