Stapeln von Matrizen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
BennyProfane
User
Beiträge: 10
Registriert: Samstag 9. März 2019, 14:07

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.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

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)
BennyProfane
User
Beiträge: 10
Registriert: Samstag 9. März 2019, 14:07

Hey Sirius,
vielen Dank für deine Antwort! Dein Ansatz mach mehr Sinn :D Danke!
Antworten