Kopiowanie tablicy NumPy a widok
Różnica między kopiowaniem a widokiem
Główna różnica między kopią a widokiem tablicy polega na tym, że kopia jest nową tablicą, a widok jest tylko widokiem oryginalnej tablicy.
Kopia jest właścicielem danych i wszelkie zmiany wprowadzone w kopii nie wpłyną na oryginalną tablicę, a wszelkie zmiany wprowadzone w oryginalnej tablicy nie wpłyną na kopię.
Widok nie jest właścicielem danych, a wszelkie zmiany wprowadzone w widoku wpłyną na oryginalną tablicę, a wszelkie zmiany dokonane w oryginalnej tablicy wpłyną na widok.
KOPIUJ:
Przykład
Utwórz kopię, zmień oryginalną tablicę i wyświetl obie tablice:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 42
print(arr)
print(x)
Kopia NIE POWINNA mieć wpływu na zmiany dokonane w oryginalnej tablicy.
POGLĄD:
Przykład
Utwórz widok, zmień oryginalną tablicę i wyświetl obie tablice:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
arr[0] = 42
print(arr)
print(x)
Na widok POWINNY mieć wpływ zmiany dokonane w oryginalnej tablicy.
Wprowadź zmiany w WIDOKU:
Przykład
Utwórz widok, zmień widok i wyświetl oba szyki:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
x[0] = 31
print(arr)
print(x)
Oryginalna tablica POWINNA mieć wpływ na zmiany wprowadzone w widoku.
Sprawdź, czy tablica jest właścicielem danych
Jak wspomniano powyżej, kopie są właścicielami danych, a widoki nie są właścicielami danych, ale jak możemy to sprawdzić?
Każda tablica NumPy ma atrybut base
, który zwraca, None
jeśli tablica jest właścicielem danych.
W przeciwnym razie base
atrybut odnosi się do oryginalnego obiektu.
Przykład
Wydrukuj wartość podstawowego atrybutu, aby sprawdzić, czy tablica posiada dane, czy nie:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
y = arr.view()
print(x.base)
print(y.base)
Kopia powraca None
.
Widok zwraca oryginalną tablicę.