Ich möchte 10.000 zufällige Binärmatrizen generieren, die die gleiche Anzahl von 1s pro Zeile und pro Spalte als eine gegebene binäre Matrix haben.Generate Random Binary Matrix
Die Matrix ist ~ 500 x ~ 10.000. Es gibt ungefähr 2.000.000 1s. Es gibt keine null Zeilen oder Spalten.
Meine aktuelle Methode konvertiert die binäre Matrix in eine zweigeteilte Adjazenzmatrix und führt 1.000.000 Random-Rand-Schalter aus, um die Zufälligkeit zu gewährleisten. Dies dauert 13.000 Sekunden für 1 Matrix. Ich kodiere in Python, benutze eine modifizierte Version der Funktion double_edge_swap von NetworkX.
Gibt es eine effizientere Möglichkeit, solche Matrizen zu generieren?
ich für den Namen dieses Problems gesucht. Es ist das Hauptproblem der [diskreten Tomographie] (https://en.wikipedia.org/wiki/Discrete_tomography) "die sich mit der Rekonstruktion eines binären Bildes aus seinen horizontalen und vertikalen Linien" und für den Fall von 2 Dimensionen (paarweise nicht parallele Gitterrichtungen), das Problem liegt in P. Es wäre interessant zu wissen, was 10.000 zufällig gewählte mögliche Rekonstruktionen benötigt. –
Sie sollten angeben, ob Sie eine bestimmte Verteilung benötigen, da verschiedene Methoden leicht unterschiedliche Verteilungen ergeben können. – Veedrac
Es hängt davon ab, ob Sie nur effizient für das Generieren von Matrizen verbessern wollen. Die gute Lösung ist Aufruf c (Funktion für generate matrix from python. – ElConrado