به آموزشگاه مجازی سینا خوش آمدید!

تفاوت بین Copy و View در NumPy

امتیاز
(0)

تفاوت اصلی بین copy و view از یک آرایه، این است که copy یک آرایه‌ی جدید است و view تنها یک نمایش از آرایه‌ی اصلی است. نسخه‌ی کپی، مالک داده‌های درونش است و هر تغییری که در آن ایجاد شود، تاثیری روی آرایه‌ی اصلی ندارد؛ و هر تغییری هم که در آرایه‌ی اصلی ایجاد شود، روی کپی تاثیری ندارد. اما نسخه‌ی view مالک داده‌های درونش نیست و هر تغییری که در view ایجاد شود، روی آرایه‌ی اصلی تاثیر می‌گذارد؛ و هر تغییری هم که در آرایه‌ی اصلی ایجاد شود، روی view تاثیر می‌گذارد. 


Copy:

مثال شماره 1

ایجاد یک کپی  و تغییر دادن آرایه‌ی اصلی و نمایش دادن هردو آرایه:

import numpy as np

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

print(arr)
print(x)

نتیجه:

[42  2  3  4  5]
[1 2 3 4 5]
امتحان کنید

نکته: اگر تغییری در آرایه‌ی اصلی انجام دهیم، این تغییر نباید روی کپی تاثیری داشته باشد. 


View:

مثال شماره 2

ایجاد یک view و تغییر دادن آرایه‌ی اصلی و نمایش دادن هردو آرایه:

import numpy as np

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

print(arr)
print(x)

نتیجه:

[42  2  3  4  5]
[42  2  3  4  5]
امتحان کنید

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


تغییر ایجاد کردن در View

مثال شماره 3

ایجاد یک view و تغییر دادن این view و نمایش دادن هردو آرایه:

import numpy as np

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

print(arr)
print(x)

نتیجه:

[31  2  3  4  5]
[31  2  3  4  5]
امتحان کنید

نکته: با ایجاد تغییرات در view، آرایه‌ی اصلی نیز باید تاثیر بپذیرد. 


بررسی اینکه آیا یک آرایه، مالک داده‌های خود است یا نه

همان طور که در بالا گفته شد، Copyها مالک داده‌های خود هستند و viewها مالک داده‌های خود نیستند، اما ما چگونه می‌توانیم این موضوع را بررسی کنیم؟

هر آرایه در NumPy یک خصوصیت به نام base دارد که اگر این آرایه مالک داده‌ها باشد، مقدار None را برمی‌گرداند؛ در غیر این صورت، خصوصیت base، به آبجکت اصلی رجوع می‌کند. 

مثال شماره 4

پرینت کردن مقدار خصوصیت 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)

نتیجه:

None
[1 2 3 4 5]
امتحان کنید

copy مقدار None را برمی‌گرداند. اما view آرایه‌ی اصلی را برمی‌گرداند. 


منبع: www.w3schools.com/python

 

  • بازدید: 50

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.

ارسال