La mia impressione è che in NumPy due array possano condividere la stessa memoria. Prendiamo il seguente esempio:C'è un modo per verificare se gli array di NumPy condividono gli stessi dati?
import numpy as np
a=np.arange(27)
b=a.reshape((3,3,3))
a[0]=5000
print (b[0,0,0]) #5000
#Some tests:
a.data is b.data #False
a.data == b.data #True
c=np.arange(27)
c[0]=5000
a.data == c.data #True (Same data, not same memory storage), False positive
Quindi, chiaramente b
non ha fatto una copia di a
; ha appena creato alcuni nuovi metadati e lo ha allegato allo stesso buffer di memoria che utilizza a
. C'è un modo per verificare se due array fanno riferimento allo stesso buffer di memoria?
La mia prima impressione è stata quella di utilizzare a.data is b.data
, ma che restituisce false. Posso fare a.data == b.data
che restituisce True, ma non penso che controlli per assicurarsi che a
e condividano lo stesso buffer di memoria, solo che il blocco di memoria a cui fa riferimento a
e quello a cui fa riferimento b
hanno gli stessi byte.
Ecco la domanda più pertinente in precedenza: http://stackoverflow.com/questions/10747748/how-do-i-check-that-two-slices-of-numpy-arrays-are-the-same- o sovrapposti –
@RobertKern - Grazie. In realtà avevo visto quel post, ma dal momento che non riuscivo a trovare la documentazione per 'numpy.may_share_memory' (oltre che l''aiuto' incorporato), pensavo che potesse esserci qualcos'altro - ad es. 'Numpy.uses_same_memory_exactly'. (il mio caso d'uso è leggermente meno generale dell'altro, quindi ho pensato che potesse esserci una risposta più definitiva). Ad ogni modo, avendo visto il tuo nome su alcune numere mailing list, immagino che la risposta sia "non esiste una tale funzione". – mgilson
'numpy.may_share_memory()' non compare nel manuale di riferimento solo a causa di un incidente dell'organizzazione del manuale di riferimento. È la cosa giusta da usare Sfortunatamente, al momento non esiste una funzione 'uses_same_memory_exactly()'. Per implementare tale funzione è necessario risolvere un'equazione Diofanteina lineare delimitata, un problema NP-difficile. La dimensione del problema di solito non è troppo grande, ma solo scrivere l'algoritmo è fastidioso, quindi non è stato ancora fatto. Se lo facciamo, sarà incorporato in 'numpy.may_share_memory() ', quindi è quello che consiglio di usare. –