تفاوت بین copy و view در ماژول نامپای python numpy

تفاوت اساسی بین کپی یک آرایه و نمای آن این است که، کپی از یک آرایه، یک آرایه جدید ایجاد می کند اما نمای یک آرایه فقط یک نما از آرایه اصلی است.

کپی کردن از آرایه باعث می شود که یک نسخه از آرایه را داشته باشیم و تغییرات در کپی آرایه تاثیری بر آرایه اصلی ندارد و هر گونه تغییری در آرایه اصلی هم ایجاد شود تاثیری در کپی آرایه ندارد.

در حالی که نمای آرایه مالکیتی بر نسخه از آرایه اصلی ندارد و هر گونه تغییر در نمای آرایه بر روی آرایه اصلی نیز اعمال می شود، هر گونه تغییر در آرایه اصلی هم بر روی نمای آرایه اعمال خواهد شد.

بهزاد میرزازاده بهزاد میرزازاده

زمان مطالعه

3 دقیقه

بازدید

187

پرسش و پاسخ

0
تفاوت بین copy و view در ماژول نامپای python numpy

Copy آرایه در نامپای پایتون (numpy)

مثال: در زیر یک کپی از یک آرایه ایجاد کردیم، تغییراتی در آن ایجاد کردیم و آن را با آرایه اصلی مقایسه کردیم.


import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 42
print(arr)
print(x)

Copy آرایه در نامپای پایتون (numpy)

نکته: نسخه کپی نباید تحت تاثیر تغییرات در آرایه اصلی قرار بگیرد.

View آرایه در پایتون با numpy

مثال: در زیر یک نما از یک آرایه ایجاد کردیم، تغییراتی در آن ایجاد کردیم و آن را با آرایه اصلی مقایسه کردیم.

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
arr.view()
arr[0] = 42
print(arr)
print(x)

View آرایه در پایتون با numpy

نکته: نمای آرایه باید تحت تاثیر تغییرات در آرایه اصلی قرار بگیرد.

ایجاد تغییرات در view آرایه

مثال: در زیر یک نما دیگر از یک آرایه ایجاد کردیم، تغییراتی در آن ایجاد کردیم و آن را با آرایه اصلی مقایسه کردیم.

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
x[0] = 31
print(arr)
print(x)

ایجاد تغییرات در view آرایه در نامپای

نکته: آرایه اصلی باید تحت تاثیر تغییرات در نمای آرایه قرار بگیرد.

بررسی مالکیت داده ها در آرایه

همانطور که در بالا گفته شد، کپی های آرایه مالک داده ها هستند, یعنی داده ها را به عنوان یک نسخه جدا از آرایه اصلی در اختیار دارن و تغییرات در آن ها باعث اعمال تغییرات در یکدیگر نمی شوند، اما در نمای آرایه دقیقا برعکس است و نسخه جدیدی در اختیار ندارند و تغییرات در هر کدام باعث اعمال تغییرات در دیگری می شود، اما چگونه تشخیص دهیم که یک آرایه کپی است یا یک نما؟

همه آرایه های NumPy دارای یک ویژگی با نام base هستند که در صورتی که مالکیت داده ها را در اختیار داشته باشند مقدار None برگشت می دهد.

در غیر این صورت، مقدار ویژگی base به آرایه اصلی اشاره می کند.

مثال: در زیر مقدار ویژگی base را برای بررسی این که آرایه مالکیت داده ها را در اختیار دارد یا نه، بررسی کرده ایم.

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
y = arr.view()
print(x.base)
print(y.base)

بررسی مالکیت داده ها در آرایه در پایتون ماژول numpy

نکته: در صورت کپی بودن آرایه مقدار None را برگشت می دهد و در صورت نما بودن، آرایه اصلی را برگشت می دهد.