انواع داده (Data Types)
برای کار جدی با نامپای باید انواع داده در نامپای را بشناسی. هر عدد، متن یا مقدار منطقی یک نوع داده (Data Type) دارد؛ مثل این که در مدرسه دفتر ریاضی، دفتر دیکته و دفتر نقاشی جدا داری.
انواع داده در پایتون
خود پایتون چند نوع داده مهم دارد. هرکدام برای یک کار است؛ مثل این که برای ریاضی از ماشین حساب استفاده می کنی، برای نقاشی از مداد رنگی.
stringیعنی متن؛ هرچیزی داخل کوتیشن؛ مثل "ABCD".integerیعنی عدد صحیح؛ مثل -1، 0، 5.floatیعنی عدد اعشاری؛ مثل 1.2 یا 42.42.booleanیعنی درست یا نادرست؛TrueیاFalse.complexیعنی عدد مختلط؛ مثل 1.0 + 2.0j.
انواع داده در نامپای
نامپای علاوه بر این ها، انواع داده بیشتری دارد. برای هر نوع یک حرف کوتاه گذاشته است. این طوری آرایه ها سریع تر و کم حجم تر می شوند. این بخش قلب مبحث انواع داده در نامپای است.
iعدد صحیح (integer).bمقدار بولی (boolean).uعدد صحیح بدون علامت (unsigned integer).fعدد اعشاری (float).cعدد مختلط اعشاری (complex float).mبازه زمانی (timedelta).Mزمان و تاریخ (datetime).Oشیء پایتون (object).Sرشته بایت محور (string).Uرشته یونیکد (unicode string).Vتکه ثابت حافظه برای نوع دیگر (void).
دیدن نوع داده آرایه با dtype
هر آرایه نامپای یک ویژگی به نام dtype دارد. این ویژگی نوع داده عناصر آرایه را به تو می گوید؛ مثل برچسب روی دفتر.
در مثال اول، نوع داده آرایه ای از عددهای صحیح را چاپ می کنیم.
import numpy as np
arr = np.array([1, 2, 3, 4])
print(arr.dtype)
حالا نوع داده آرایه ای از رشته ها را می بینیم. توجه کن که خروجی دیگر عددی نیست، بلکه نوع رشته ای مخصوص نامپای است.
import numpy as np
arr = np.array(["apple", "banana", "cherry"])
print(arr.dtype)
ساخت آرایه با نوع داده مشخص
تابع array() یک آرگومان اختیاری به نام dtype می گیرد. با آن می توانی از اول بگویی آرایه چه نوع داده ای داشته باشد؛ مثل این که از اول بگویی این دفتر فقط برای ریاضی است.
در این مثال، عددها را به رشته تبدیل می کنیم. پس dtype='S' می گذاریم.
import numpy as np
arr = np.array([1, 2, 3, 4], dtype="S")
print(arr)
print(arr.dtype)
برای نوع های i، u، f، S و U می توانی اندازه هم تعیین کنی. مثلا i4 یعنی عدد صحیح 4 بایتی.
در مثال بعد، آرایه ای می سازیم که نوع داده اش i4 باشد.
import numpy as np
arr = np.array([1, 2, 3, 4], dtype="i4")
print(arr)
print(arr.dtype)
وقتی تبدیل نوع داده ممکن نیست
اگر نوعی بدهی که بعضی مقدارها قابل تبدیل به آن نباشند، نامپای خطای ValueError می دهد. ValueError یعنی مقدارِ ورودی برای نوع موردنظر نامعتبر است؛ مثل این که بخواهی کلمه را در ماشین حساب جمع بزنی.
در این مثال، رشته 'a' را نمی شود به عدد صحیح تبدیل کرد. پس خطا می گیریم.
import numpy as np
arr = np.array(["a", "2", "3"], dtype="i")
تبدیل نوع داده روی آرایه موجود با astype()
بهترین راه برای تغییر نوع داده در نامپای استفاده از متد astype() است. این متد یک کپی جدید از آرایه می سازد و نوع داده آن را عوض می کند؛ آرایه اصلی دست نخورده می ماند.
در مثال اول، آرایه اعشاری را با پارامتر 'i' به آرایه عدد صحیح تبدیل می کنیم.
import numpy as np
arr = np.array([1.1, 2.1, 3.1])
newarr = arr.astype("i")
print(newarr)
print(newarr.dtype)
همین کار را می توانی با خود نوع پایتون هم انجام دهی. این بار به جای 'i' از int استفاده می کنیم.
import numpy as np
arr = np.array([1.1, 2.1, 3.1])
newarr = arr.astype(int)
print(newarr)
print(newarr.dtype)
در مثال سوم، عددهای صحیح را به نوع بولی تبدیل می کنیم. در نامپای، صفر تبدیل به False می شود و هر عدد غیر صفر تبدیل به True می شود.
import numpy as np
arr = np.array([1, 0, 3])
newarr = arr.astype(bool)
print(newarr)
print(newarr.dtype)
انواع داده در نامپای و ادامه مسیر یادگیری
اگر تازه با نامپای آشنا شده ای، پیشنهاد می کنم بعد از این صفحه، دوباره مقدمه نامپای را مرور کنی تا تصویر کلی در ذهنت محکم شود.
سپس می توانی سراغ صفحه برش آرایه در نامپای بروی تا ببینی این انواع داده در نامپای موقع برش آرایه ها چه کاربردی دارند.
هر وقت شک داشتی چه نوعی مناسب است، این صفحه انواع داده در نامپای مرجع سریع تو خواهد بود.
اگر دوست داری نسخه انگلیسی را هم ببینی، به صفحه NumPy Data Types در W3Schools سر بزن. برای توضیحات عمیق تر، مستندات رسمی NumPy Doc همیشه در دسترس است.
جمع بندی سریع
- در نامپای، هر آرایه یک نوع داده مشخص و مهم دارد.
- ویژگی
dtypeنوع داده آرایه را به تو نشان می دهد. - با پارامتر
dtypeدرarray()نوع آرایه را از اول تعیین کن. - با متد
astype()نوع داده آرایه را ایمن و تمیز عوض کن. - ترکیب درست انواع داده در نامپای، سرعت و دقت کد را بالا می برد.