ich versuche momentan ein Programm das ich in Octave geschrieben habe in Python zu übersetzten.
Das Programm berechnet am Ende ein Sparse-Eigenwertproblem. Ich scheitere allerdings bereits beim Erstellen meiner csc_matrix.
Ich möchte mir ein Daten-Array, ein Column _Index- und ein Row_Index-Array erzeugen und dies nutzen um meine Martix zu erzeugen.
Beispielhaft möchte ich eine 5x5 große Matrix erzeugen die mit null initialisiert ist und einem Rand r der Breite r=2 den Wert 5000 zuweist.
Das klappt auch soweit für den oberen und den unteren Rand, allerdings sobald ich mehr als zwei Anweisungen der Form: [np.arange(r)]*ny (ny ist die Spaltenanzahl) in die Anweisung np.array() schreibe bekomme ich eine Fehlermeldung.
Meine Frage ist nun, wie erzeuge ich ein Array (möglichst in einer Zeile) das mehrer Anweisungen der Form [np.arange(r)]*ny verkraftet.
Damit es deutlicher wird hier der Octave-Code der 2 Matrizen die ich erzeugen möchte:
Matrix 1:
Code: Alles auswählen
nx = 4
ny = 5
n=nx*ny;
r=1;
sigma_Cu = 5e7;
sigma_mat = zeros(nx,ny);
sigma_mat(1:r,:) = sigma_Cu;
sigma_mat(end:-1:end-(r-1),:) = sigma_Cu;
sigma_mat(:,1:r) = sigma_Cu;
sigma_mat(:,end:-1:end-(r-1)) = sigma_Cu;
Für den oberen Rand funktioniert das auch noch ganz gut in Python:
Code: Alles auswählen
x = 5000
times = ny*r*2+(nx-2*r)*2
data_vec = np.array([x]*ny*r)
A_row = np.array([np.arange(r)]*ny).flatten()
A_col = np.array([np.arange(ny)]*r).flatten()
A = scipy.sparse.csc_matrix((data_vec,(A_row,A_col)),shape=[nx,ny])
Matrix 2:
Code: Alles auswählen
diagvec = ones(1,n);
diagvec2 = ones(1,n);
diagvec2(1:nx:end) = 2;
diagvec3 = ones(1,n);
diagvec3(nx:nx:end) = 0;
A = sparse([1:n],[1:n],diagvec,n,n);
A = A + sparse([1:nx],[1:nx],diagvec(1:nx),n,n);
A = A + sparse([nx+1:n],[1:n-nx],diagvec(1:n-nx),n,n);
Bei der Erzeugung dieser Matrix in Python scheitert es ebenfalls daran die notwendigen Arrays zu erzeugen.
Ich dachte nun, dass ich um diese Matrix zu realisieren nur die Spalten-Indices und die Zeilen-Indices in jeweils ein Array zusammenfassen muss und die Datenarrays (diavec-diavec3) ebenfalls in ein Array zusammen fasse.
Ich wäre euch sehr dankbar, wenn ihr mir erklären könntet wie ich das bewerkstellige.
Ich hoffe ich hab mich verständlich ausgedrückt
Grüße
Shaint