جابه جایی تصادفی (Random Permutation)
در این صفحه با جابه جایی تصادفی در نامپای آشنا می شویم. می بینی چطور می شود ترتیب عنصرهای یک آرایه را به صورت تصادفی عوض کرد؛ هم روی خود آرایه، هم با ساختن یک آرایه جدید.
آشنایی با جابه جایی تصادفی در نامپای
جابه جایی یا Permutation یعنی تغییر ترتیب عنصرها. مثلا آرایه [1, 2, 3] را به [3, 2, 1] تبدیل کنیم.
در ماژول random نامپای دو ابزار مهم داریم: تابع shuffle() و تابع permutation().
shuffle روی خود آرایه کار می کند و آن را درجا تغییر می دهد. اما permutation یک آرایه جدید با ترتیب جابه جاشده برمی گرداند.
اگر می خواهی تصویر کامل تری از شبیه سازی داشته باشی، نگاه به توزیع داده در نامپای هم خیلی کمک می کند.
شافل کردن آرایه با shuffle
shuffle یعنی آرایه را به صورت تصادفی درهم بریزیم؛ آن هم روی خود آرایه.
به این نوع تغییر می گوییم in-place؛ یعنی آرایه اصلی عوض می شود و کپی تازه ای برنمی گردد.
مثال: جابه جایی تصادفی با shuffle
در این مثال، ترتیب عددهای 1 تا 5 به صورت تصادفی عوض می شود.
from numpy import random
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
random.shuffle(arr)
print(arr)
هر بار این کد را اجرا کنی، خروجی می تواند ترتیب متفاوتی داشته باشد. اما خود آرایه arr عوض شده است و ترتیب قبلی را از دست داده است.
نکته: اگر به آرایه اصلی نیاز داری، قبل از استفاده از shuffle از آن یک کپی بگیر.
تولید آرایه جدید با permutation
permutation هم جابه جایی تصادفی انجام می دهد؛ اما آرایه جدید می سازد و آرایه اصلی را دست نخورده می گذارد.
این روش زمانی خوب است که بخواهی ترتیب های مختلف را تست کنی؛ بدون اینکه داده اولیه خراب شود.
مثال: ساخت آرایه با ترتیب جابه جاشده
در این مثال، یک جابه جایی تصادفی از همان آرایه می گیریم؛ اما نتیجه در خروجی چاپ می شود و خود arr همان قبلی می ماند.
from numpy import random
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
result = random.permutation(arr)
print(result)
اینجا result ترتیب جدید را دارد؛ اما arr همان آرایه اولیه است. بنابراین می توانی چندین بار تابع را صدا بزنی و ترتیب های مختلف بگیری.
برای پروژه های بزرگ تر، مثلا شافل کردن سوال های یک آزمون، معمولا جابه جایی تصادفی در نامپای با permutation انتخاب امن تری است.
تمرین برای جابه جایی تصادفی
برای تمرین جابه جایی تصادفی در نامپای این سه مرحله را انجام بده:
- یک آرایه از شماره صندلی های کلاس بساز؛ مثلا 1 تا 20.
- با
shuffle()ترتیب صندلی ها را عوض کن و خروجی را ببین. - همان آرایه را با
permutation()جابه جا کن و تفاوت تغییر درجا و آرایه جدید را مقایسه کن.
جمع بندی سریع
- جابه جایی تصادفی یعنی تغییر ترتیب عنصرهای آرایه.
- تابع
shuffle()آرایه را درجا عوض می کند. - تابع
permutation()یک آرایه جدید برمی گرداند. - برای حفظ داده اصلی، از permutation کمک بگیر.
- برای شبیه سازی کامل تر، موضوع توزیع داده در نامپای را هم ببین.