Boolesche Operationen auf scipy.sparse Matrizen

8

Ich habe eine Reihe von dünn besetzten Matrizen, die mit booleschen Werten gefüllt sind, für die ich logische Operationen ausführen muss (meistens elementweise ODER).

wie in numpy, summierende Matrizen mit dtype = 'bool' ergibt das elementweise OR, allerdings gibt es einen unangenehmen Nebeneffekt:

%Vor%

Der Datentyp wird in 'int8' geändert, was Probleme für zukünftige Operationen verursacht. Man könnte damit umgehen, indem man sagt:

%Vor%

Aber ich habe den Eindruck, dass all diese Änderungen einen Leistungseinbruch verursachen würden.

Warum unterscheidet sich der dtype des Ergebnisses von den Operanden?
Und gibt es eine bessere Möglichkeit, logische Operationen für dünn besetzte Matrizen in Python auszuführen?

    
TheONP 24.01.2013, 21:39
quelle

1 Antwort

5

Logische Operationen werden für dünn besetzte Matrizen nicht unterstützt, aber die Rückumwandlung in ein 'bool' ist nicht allzu teuer. Wenn Sie Matrizen im LIL-Format verwenden, kann es vorkommen, dass die Konvertierung aufgrund von Leistungsschwankungen negativ ausfällt:

%Vor%

Sie haben vielleicht bemerkt, dass Ihre LIL-Matrizen in das CSR-Format konvertiert wurden, bevor Sie sie zusammenfügen, schauen Sie sich das Rückgabeformat an. Wenn Sie bereits CSR-Format verwendet haben, wird der Konvertierungsaufwand deutlicher:

%Vor%

CSR- (und CSC-) Matrizen haben ein data -Attribut, das ein 1D-Array ist, das die tatsächlichen Nicht-Null-Einträge der Sparse-Matrix enthält, so dass die Kosten für die Neuspeicherung Ihrer Sparse-Matrix von der Anzahl von Nicht-Null abhängen Einträge Ihrer Matrix, nicht ihre Größe:

%Vor%     
Jaime 24.01.2013, 22:31
quelle

Tags und Links