2016-03-03 3 views
5

Warum liefert dieses Slicing-Beispiel nicht die gleichen Ergebnisse wie Standardlisten? Es funktioniert so, als ob es zuerst an[:2] = bn[:2] und dann bn[:2] = an[:2] auswertet.Warum funktioniert dieses Slicing-Beispiel in NumPy nicht so wie es mit Standardlisten funktioniert?

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) 

Ausgang:

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

Wenn ich es so machen - alles funktioniert:

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

Antwort

6

Für Listen a[:2] ist eine Kopie der Liste mit den ersten beiden Elemente, für numpy Arrays Dies ist nur eine Referenz. Sie müssen explizit eine Kopie erstellen:

+0

Hm. Vielen Dank. Ich werde es akzeptieren, sobald die Abklingzeit abgelaufen ist. – userqwerty1

Verwandte Themen