Seite 1 von 1

Stapeln von Matrizen

Verfasst: Freitag 15. März 2019, 15:24
von BennyProfane
Hey,

ich habe folgendes Problem:

gegeben ist eine N x N - Matrix A und eine 2 x 2 - Matrix B. Ich möchte eine 2N x 2N - Matrix C erstellen, die aus aneinandergereihten bzw. gestapelten Kopien von B besteht, jeweils skalar multipliziert mit dem entsprechenden Eintrag aus A. Für

N = 2,
A = [[1,2], [3,4]] und
B = [[0,1],[1,0]]

würde man folgende Matrix erhalten:

Code: Alles auswählen

 C = 
[[0,1,0,2],
[1,0,2,0]
[0,3,0,4]
[3,0,4,0]] 
Das Ergebnis sollte als np.array ausgegeben werden.

Mir ist es bereits gelungen, eine 2 x 2N - Matrix zu erstellen, die aus aneinandergereihten Kopien von B besteht, jeweils skalar multipliziert mit den Einträgen der i - ten Zeile von A. Code:

Code: Alles auswählen

import numpy as np
X = [0,1]
A = [[1,2],[3,4]]
B = np.array([[0,1],[1,0]])
ai = np.array([[ ], [ ]])
i = 0
for j in X:
	ai = np.append(ai, B * A[i][j], axis = 1)

print(ai)
Allerdings gelingt es mir nicht, jetzt über alle is zu iterieren und alle ais zu stapeln. Hat jemand eine Idee, wie man das machen könnte? Oder vielleicht einen besseren Ansatz?

Beste Grüße, BP.

Re: Stapeln von Matrizen

Verfasst: Freitag 15. März 2019, 16:29
von Sirius3
So bekommst Du schon einmal ein 4-Dimensionales Array mit den Produkten:

Code: Alles auswählen

C = A.reshape(-1,1).dot(B.reshape(1,-1)).reshape(A.shape + B.shape)
jetzt mußt Du nur noch die Achsen tauschen um auf die richtige Anordnung der Werte zu kommen:

Code: Alles auswählen

C = C.swapaxes(1, 2).reshape(numpy.array(A.shape) * B.shape)

Re: Stapeln von Matrizen

Verfasst: Samstag 16. März 2019, 18:46
von BennyProfane
Hey Sirius,
vielen Dank für deine Antwort! Dein Ansatz mach mehr Sinn :D Danke!