Sto usando python per lavorare con matrici di grandi dimensioni (circa 2000 x 2000), dove ogni punto I
, J
nella matrice rappresenta un singolo pixel.Python - rappresentazione efficiente di pixel e valori associati
Le matrici stesse sono sparse (ovvero una parte sostanziale di esse avrà valori zero), ma quando vengono aggiornate tendono ad essere operazioni di incremento, a un numero elevato di pixel adiacenti in un "blocco" rettangolare, piuttosto che pixel casuali qua e là (una proprietà non mi utilizzano attualmente a mio vantaggio ..). paura un po 'nuova alla matrice l'aritmetica, ma ho guardato in un certo numero di possibili soluzioni, tra le varie versioni di scipy
matrici sparse. Finora coordinate (COO) matrici sembrano essere le più promettenti. Così, per esempio dove voglio incrementare forma un blocco, avrei dovuto fare qualcosa sulla falsariga di:
>>> from scipy import sparse
>>> from numpy import array
>>> I = array([0,0,0,0])
>>> J = array([0,1,2,3])
>>> V = array([1,1,1,1])
>>> incr_matrix = sparse.coo_matrix((V,(I,J)),shape=(100,100))
>>> main_matrix += incr_matrix #where main_matrix was previously defined
in futuro, mi piacerebbe avere una rappresentazione valore di pixel più ricco di anycase (tuple per rappresentare RGB, ecc), qualcosa che NumPy serie doesnt sostegno fuori dalla scatola (o forse ho bisogno di usare this).
definitiva avrò un certo numero di queste matrici che avrei bisogno di fare semplici arithmitic, e avrei bisogno il codice per essere il più efficiente possibile - e distribuibili, quindi avrei bisogno di essere in grado perseverare e scambiare questi oggetti in una rappresentazione minuscola senza sanzioni sostanziali. Mi chiedo se questo è il modo giusto per andare, o dovrei cercare rotolare le mie strutture utilizzando dicts
ecc?
Dubito che si possa produrre qualcosa di meglio delle capacità scipy e numpy. Ma non sono abbastanza abile in loro per essere più affermativo. A proposito, non mi piace usare la parola "vettore". Da un lato, non esiste una struttura dati integrata denominata 'vector' in Python. D'altra parte, è improbabile che una tabella bidimensionale venga chiamata "vettore" in senso matematico. Quindi, la tua entità non è né un oggetto Python chiamato 'vector', né una struttura matematica chiamata 'vector' – eyquem
che è vera - dovrebbe effettivamente dire matrix invece di vector (?) :) – malangi
2000x2000 non è molto grande. Non è necessario utilizzare array sparsi. Si dovrebbe ottenere prestazioni molto migliori semplicemente usando i normali array numpy. Inoltre, numpy _very_ much supporta "qualcosa come" i vettori RGB "per ogni pixel ... È solo un array 2000x2000x3! Funziona bene, ed è veramente efficiente! –