فهرست بستن

نکاتی پیرامون کار با آرایه‌های numpy در پایتون

کتابخانه محاسبات عددی numpy به همراه کتابخانه‌های scipy و matplotlib مجموعه‌ای غنی از امکانات را برای انجام شبیه سازی های علمی و بازنمایی آنها فراهم آورده اند. لکن نحوه استفاده از امکانات فراهم شده توسط این کتابخانه ها تعیین کننده میزان راحتتر شدن کار برای ما می باشد. در این نوشته به بررسی ریزه کاری هایی از آرایه numpy پرداخته خواهد شد.

بسم الله الرحمن الرحیم

آرایه‌ها کاربرد بسیار گسترده ای در مدل سازی ریاضی دارند، از این رو در بسیاری از کاربردهای مهندسی و محض ظاهر می شوند. در زبان برنامه نویسی پایتون کتابخانه numpy امکانات وسیعی برای استفاده از آرایه ها فراهم آورده است. در ادامه علاوه بر معرفی ابتدایی نحوه استفاده از آن، به بیان ریزه کاری های بسیار مهم مرتبط پرداخته می شود.

اولین مثال نحوه ایجاد یک آرایه با استفاده از یک لیست پایتون است. به قطعه کد زیر دقت نمایید:

from numpy import array

v = array([1, 2, 3, 4, 5, 6, 7, 8, 9])

در سطر اول از کتابخانه numpy کلاس array فراخوانی شده است . سپس در سطر بعدی با استفاده از آن، از روی لیستی آرایه v ساخته شده است. نکته این کد نوع داده برای عناصر آرایه است که آگاهی از آن در بعضی از کارهای محاسباتی ضروری است. برای مشاهده نوع داده های آرایه بصورت زیر عمل می کنیم:

print(v.dtype)

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

v = array([1, 2, 3, 4, 5, 6, 7, 8, 9], dtype="float64")

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

from numpy import random, sort

v = random.random(1000000)
v = sort(v)

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

from numpy import random, sort
from time import time

v = random.random(1000000)

t = time()
v = sort(v)
print(time() - t)

v = random.random(1000000)

t = time()
v = sort(v)[::-1]
print(time() - t)

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

from numpy import random, sort

v = random.random(size=(1000, 1000))
u = v[v[:,0].argsort()]

خروجی argsort اندیسهای مرتبسازی شده می باشد که آرایه تصادفی v با استفاده از آن بازآرایی شده و در u ذخیره می شود. همانطور که مشخص است مرتب سازی بر اساس ستون اول آرایه v انجام گرفته است.

نکته بعدی که بیان می شود انتخاب تعدادی سطر یا ستون از یک آرایه چند بعدی است. بسته به اینکه سطرها و ستونها پشت سر هم باشند یا نه می توان به دو صورت عمل کرد که با مثال توضیح داده خواهد شد:

from numpy import random

a = random.random(size=(10, 10))
print(a[:, 4:7])
print(a[:, [4, 5, 6]])

در این مثال یک آرایه دو بعدی ۱۰ در ۱۰ تصادفی ایجاد نموده و سعی می کنیم ستونهای چهارم تا ششم را جدا نماییم. برای اینکار به دو صورت می توان عمل کرد. می توان با گذاشتن یک دو نقطه : تمام سطرها و با ۴:۷ ستون چهارم تا ششم را انتخاب کرد. یا در حالت دیگر می توان تمام سطرها را با کولون و ستونهای مورد نظر را در یک لیست مشخص کرد. در صورتی که ستون ها مورد نظر ما به ترتیب پشت سر هم نباشند استفاده از روش دوم و مشخص کردن با لیست آسانتر خواهد بود. به مثال زیر توجه نمایید:

from numpy import random

a = random.random(size=(10, 10))
print(a[:, [1, 4, 8]])

نکته دیگر تغییر ابعاد آرایه numpy با استفاده از دستور reshape می‌باشد. برای نمونه به قطعه کد زیر توجه نمایید:

from numpy import array, reshape

a = array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
print(a)
print(a.reshape((2, 6)))
print(reshape(a, (2, 3, 2)))

همانطور که مشهد است برای تغییر ابعاد آرایه هم می‌توان از تابع reshape آماده شده در کلاس ndarray استفاده کرد و هم از تابع reshape از ماژول numpy. ابعاد جدید آرایه در هر دو حالت به شکل یک چندتایی وارد تابع می شود.

آخرین مبحثی که در این نوشته به آن پرداخته خواهد شد، تشکیل آرایه از کنار هم قرار دادن افقی و عمودی آرایه‌های دیگر می‌باشد. برای این کار می‌توان از توابع vstack و hstach استفاده کرد که نحوه استفاده از آنها در قطعه کد زیر نشان داده شده است. دقت نمایید که ورودی این توابع به شکل چندتایی حاوی آرایه‌های numpy می‌باشد.

from numpy import random, vstack, hstack

a = random.rand(2, 3)
b = random.rand(4, 3)
c = random.rand(2, 7)

print(vstack((a, b)))
print(hstack((a, c)))

در نظر داشته باشید که آرایه‌های کنار هم قرار گرفته باید از لحاظ ابعاد با همدیگر از منظر قرار گرفتن افقی یا عمومی سازگار باشند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *