sparse.identity und sparse.csr_matrix sind
Funktionen mit Rückgabewert, man tut was rein und bekommt das Ergebnis zurück, wie z.B. bei der cos-Funktion. Das Ergebnis von sparse.identity und sparse.csr_matrix ist jeweils ein Matrix-Objekt.
setdiag ist eine
Methode der Matrix-Klasse. Du rufst diese Methode auf um das Matrix-Objekt zu verändern. Es wird dabei kein neues Matrix-Objekt erzeugt, sondern das alte Matrix-Objekt wird verändert.
Du brauchst nicht für jedes Zwischenergebnis eine Variable anlagen (Informatik-Sprech: "Wert binden"). Variablen sollten gute Namen haben. Wenn Du Mathe programmierst orientier Dich am Theorie-Text, Matrizen haben Großbuchstaben und Vektoren haben (oftmals) Kleinbuchstaben. Im Theorietext würde auch niemand auf die Idee kommen Matrizen und Vektoren der Reihe nach so wie sie kommen von B1 bis BN durchzunummerieren.
Code: Alles auswählen
b=np.zeros((P-1,N-1))
for i in range(1,N):
b[:,i-1]=np.array(a(x1[i],x2[1:P]))
B1=sparse.csr_matrix( sparse.identity((P-1)*(N-1)) )
B1.setdiag( b.flatten() )