Funzione .copy() su una matrice esegue una copia per reference e non per valore

m
mel8 (1250 points)
0 12 19
asked Dec 2, 2018 in Es1 by mel8 (1,250 points)
recategorized Dec 3, 2018 by andrea.sterbini
Per lavorare al primo esercizio dell'homework 3 vorrei crearmi una copia della matrice ricavata dall'immagine in input (chiamata img) ed andare a cambiare li i valori dei colori qualora trovo un rettangolo vuoto all'interno, ma nel momento in cui vado a fare img2 = img.copy() realizza una copia per reference e non per valori... come posso risolvere questo problema?

Grazie in anticipo
162 views

3 Answers

Best answer
K
Khalester (3310 points)
1 5 24
answered Dec 2, 2018 by Khalester (3,310 points)
selected Dec 2, 2018 by mel8
Guarda se vuoi usare sempre la stessa immagine, ti consiglio invece di usare un copy, di riusare il load sulla stessa immagine (assegna quindi il load anche alla immagine-copia). Io ho fatto così e funziona uguale
m
mel8 (1250 points)
0 12 19
commented Dec 2, 2018 by mel8 (1,250 points)

Grazie mille, non ci avevo pensato

T
Tommaso (1480 points)
0 8 22
commented Dec 3, 2018 by Tommaso (1,480 points)
Grazie anche io avevo avuto il tuo stesso problema... il copy() che crea una copia per reference e quindi lavoravo con l'immagine modificata. Provo ad utilizzare a questo punto il tuo metodo e vi faccio sapere se risolvo così :)
_andrea_ (45670 points)
2 40 297
answered Dec 2, 2018 by _andrea_ (45,670 points)
anche io faccio la stessa cosa ma non mi crea alcun problema. in che punto del programma questo diventa un problema per te?
m
mel8 (1250 points)
0 12 19
commented Dec 2, 2018 by mel8 (1,250 points)

Fin da subito. la copia della matrice è la mia quinta linea di codice e da li in poi diventa tutto un casino in quanto qunado trovo il primo rettangolo e coloro i bordi di verde, l'angolo in basso a destra coincide con l'angolo superiore sinistro di un altro rettangolo (la prima immagine dell'homework) e siccome quell'angolo è di un altro colore non mi trova il secondo rettangolo... si potrei risolvere dicendo che deve andare a cercare i due colori (bianco e vedere, il verde come conseguenza di aver colorato un rettangolo precedente) ma volevo risolvere in un modo legittimo questo problema del copy andando a lavorare su due matrici diverse... mi serve aiuto

_andrea_ (45670 points)
2 40 297
commented Dec 2, 2018 by _andrea_ (45,670 points)
ah allora io ho risolto colorando tutti i quadrati alla fine, se vuoi fare così
I
InnerAlbeiro (550 points)
0 2 7
answered Dec 2, 2018 by InnerAlbeiro (550 points)
edited Dec 2, 2018 by InnerAlbeiro
Per fare una copia di una matrice poi usare la deepcopy ma non sono permesse delle librerire quindi puoi fare questo copia = [row[:] for row in matrice] crea una copia di una matrice per valore