2016-03-03 7 views
5

Perché questo esempio di divisione non fornisce gli stessi risultati degli elenchi standard? Funziona come se prima valuta an[:2] = bn[:2] e poi bn[:2] = an[:2].Perché questo esempio di slicing non funziona in NumPy nello stesso modo in cui funziona con gli elenchi standard?

import numpy as np 

l1 = [1, 2, 3] 
l2 = [4, 5, 6] 

a = list(l1) 
b = list(l2) 

an = np.array(a) 
bn = np.array(b) 

print(a, b) 
a[:2], b[:2] = b[:2], a[:2] 
print(a, b) 

print(an, bn) 
an[:2], bn[:2] = bn[:2], an[:2] 
print(an, bn) 

uscita:

-------------------- 
[1, 2, 3] [4, 5, 6] 
[4, 5, 3] [1, 2, 6] 
-------------------- 
[1 2 3] [4 5 6] 
[4 5 3] [4 5 6] 
-------------------- 

Se lo faccio come questo - tutto funziona:

dummy = an[:2] 
an[:2] = bn[:2] 
bn[:2] = dummy 

risposta

6

Per le liste a[:2] è una copia della lista con i primi due elementi, per numpy array questo è solo un riferimento. È necessario effettuare una copia, esplicitamente:

+0

Hm. Grazie. Lo accetterò non appena il cooldown sarà finito. – userqwerty1

Problemi correlati