بخش قبلی: دیتاتایپها در نامپای
تفاوت اصلی بین copy و view برای یک آرایه در نامپای آن است که copy یک آرایه جدید است اما view در واقع یک view از آرایه اصلی است. کپی یک آرایه، دادههای مختص به خود را دارد و اگر در آن تغییری ایجاد کنیم، آرایه اصلی تغییر نمیکند. در مقابل، view به طور اختصاصی دادهای ندارد و اگر در آن تغییری ایجاد کنیم، آرایه اصلی تغییر پیدا میکند. همچنین، هر تغییری در آرایه اصلی، ممکن است بر روی view اثرگذار باشد.
در مثال زیر، یک کپی از آرایه arr با نام x ذخیره میکنیم. مشاهده میشود که تغییر درایههای x، منجر به تغییر arr (آرایه اصلی) نمیشود:
1 2 3 4 5 6 7 8 |
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.copy() arr[00] = 42 print(arr) print(x) |
در مثال زیر، بر خلاف کد بالا، با استفاده از view یک آرایه جدید ایجاد میشود. مشاهده میکنیم که تغییر آرایه جدید، منجر به تغییر در آرایه اصلی میگردد:
1 2 3 4 5 6 7 8 |
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.view() arr[00] = 42 print(arr) print(x) |
چک کردن اصالت دادههای یک آرایهی numpy
همان طور که در بالا اشاره شد، دادههای موجود در آرایه ساخته شده به وسیله copy اصالت دارند اما دادههای موجود در آرایه ساخته شده به وسیلهی view اصالت ندارند و متعلق به آرایهی دیگری هستند. برای فهم اصالت داشتن یا نداشتن دادههای یک آرایه چه کاری میتوان انجام داد؟
تمامی آرایههای numpy یک اتریبیوت با نام base دارند. اگر دادههای آرایه اصالت داشته باشند، این اتریبیوت، مقدار None دارد؛ در غیر این صورت، آرایه اصلی را نشان میدهد. برای فهم موضوع به قطعه کد زیر توجه کنید:
1 2 3 4 5 6 7 8 9 |
import numpy as np arr = np.array([1, 2, 3, 4, 5]) x = arr.copy() y = arr.view() print(x.base) print(y.base) |
arr[]= 42
^
SyntaxError: invalid syntax
چرا به من این ارور میده تو پاچرام تقریبا یه ساعته دارم تغییرش میدم
راستی مرسی ازتون خیلی واضح توضیح دادین ادم لذت میبره منتهی اینجا به مشگل خوردم فقط
سلام امیر عزیز
ممنون از لطف شما. در داخل کروشه یک صفر قرار دهید تا مشکل حل بشه. موفق باشید