Ich habe da ein kleines numpy-Problem, welches sich bestimmt elegant lösen lässt. Nur leider sehe ich nicht wie. Das Problem ist ganz einfach: Ich habe eine nxn-Matrix und jedes Element kann den Wert 0 oder 1 annehmen, also eine ganz normale Adjazenzmatrix. Nun würde ich gerne, abhängig von der Anzahl der Elemente in einer Zeile, die Zeilen verändern. Enthält eine Zeile keine 1, soll sollen alle Elemente der Zeile auf einen konstanten Wert 1.0/n gesetzt werden. Andernfalls sollen alle Elemente der Zeile durch die Anzahl der Elemente der Zeile dividiert werden. Am Ende ergibt das dann eine (transponierte) stoachastische Matrix.
Der offensichtliche Ansatz ist natürlich eine Schleife über die Zeilen:
Code: Alles auswählen
cnt = count_rows(m)
for index, (c, row) in enumerate(itertools.izip(cnt, m)):
if c:
row /= c
else:
row[:] = t
Natürlich lässt sich das ganze Problem umschiffen, indem mit ``np.vstack`` (oder ohne) und einem Generatorausdruck einfach eine neue Matrix konstruiert, mir geht es jetzt aber eher ums Prinzip Gibt es zum zeilenweisen Verändern der Matrix einen schönen Einzeiler nur mittels numpy?
Sebastian