Desidero generare 10.000 matrici binarie casuali che hanno lo stesso numero di 1s per riga e per colonna come una matrice binaria data.Genera matrice binaria casuale
La matrice è ~ 500 x ~ 10.000. Ci sono circa 2.000.000 di 1s. Non ci sono zero righe o colonne.
Il mio metodo corrente converte la matrice binaria in una matrice di adiacenza bipartita ed esegue 1.000.000 interruttori di bordo casuali per garantire casualità. Questo richiede 13.000 secondi per 1 matrice. Sto codificando in python, usando una versione modificata della funzione double_edge_swap di networkx.
Esiste un modo più efficiente per generare tali matrici?
che stavo cercando il nome di questo problema. È il problema principale della [tomografia discreta] (https://en.wikipedia.org/wiki/Discrete_tomography) "che si occupa della ricostruzione di un'immagine binaria dai suoi linesum orizzontali e verticali" e per il caso di 2 dimensioni (direzioni parallele non parallele a coppie), il problema è in P. Sarebbe interessante sapere che cosa ha bisogno di 10.000 ricostruzioni possibili scelte a caso. –
È necessario specificare se è necessaria una distribuzione particolare, poiché metodi diversi potrebbero fornire distribuzioni leggermente diverse. – Veedrac
Dipende se vuoi migliorare solo efficiente per generare matrici, la buona soluzione sarà chiamata c (funzione per generare matrice da python. – ElConrado