یک اسکریپت پایتون بنویسید که یک آرایه numpy بسازد و با انجام برش، تغییر شکل (reshape) و copy شناسه (id) اشیاء را چاپ کند تا نشان دهد کدام عملیات view ایجاد می‌کند و کدام یک کپی می‌سازد.

6.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:07

0.0

برای حل: از import numpy as np استفاده کنید و مثلاً با np.arange یک آرایه بسازید، سپس arr_slice = arr[1:5] و arr_reshaped = arr.reshape(...) و arr_copy = arr.copy() را بسازید و با تابع builtin id شناسهٔ هر متغیر را چاپ کنید. برای اثبات رفتار view می‌توانید یک مقدار را در برش تغییر دهید و تغییر در آرایهٔ اصلی را بررسی کنید؛ همچنین از صفت arr.base برای تشخیص اینکه آیا یک آرایه view است یا نه می‌توانید کمک بگیرید. نکته‌ها: reshape معمولا view برمی‌گرداند مگر تغییر ترتیب حافظه نیاز باشد، و برای کپی صریح از arr.copy() استفاده کنید؛ این اسکریپت را می‌توان در یک فایل .py اجرا یا به‌صورت خودکار با حلقه‌ای که چند حالت مختلف را تست می‌کند نرمال‌سازی کرد.

توسط پژوهشگر در 221 روز قبل ساعت 01:07
دسته بندی ها: Python Python for beginner
reyhaneh در 221 روز قبل ساعت 14:31

نکتهٔ کلیدی این است که برای تشخیص اینکه کدام عملیات view می‌دهد و کدام کپی می‌سازد، از id و arr.base استفاده کنید. برش ساده مانند arr[1:5] معمولاً یک view است و arr.base به آرایهٔ اصلی اشاره می‌کند؛ reshape هم اغلب به صورت view برمی‌گردد مگر اینکه نیاز به تغییر ترتيب حافظه باشد. برای ایجاد کپی صریح از arr.copy() استفاده کنید تا حافظهٔ جداگانه ایجاد شود و با تغییر مقدار در برش، آرایهٔ اصلی تغییر نکند. برای اعتباربخشی می‌توانید وضعیت OWNEDATA را بررسی کنید یا مقایسه با id(arr.base) انجام بدهید تا مشخص شود که آیا آنها به یک دادهٔ حافظهٔ مشترک اشاره می‌کنند.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری