کتابخانه ی Numpy برای کار با سرعت بالا با big data خلق شده است. این کتابخانه با استفاده از زبان Optimized C توسعه داده شده است و حتی از زبان های سطح پایین نیز عملکرد سریع تری دارد. قابلیت های مهم این کتابخانه به شرح زیر است:
- ارائه ی آبجکت آرایه ی چند بعدی
- توابع بهینه و پیچیده ریاضیاتی
- ابزار بکارگیری کدهای C/Cpp و Fortran
- دارای ابزار داخلی خبر خطی( linear algebra ) ، تبدیل فوریه( Fourier transform ) ، کنترل تولید اعداد تصادفی
از Numpy در ادامه ی این فصل استفاده خواهیم کرد. پیشنهاد میکنم برای تمام این فصل یک محیط مجازی ایجاد کنید و ابتدا Numpy را درون آن نصب کنید.
نکته:
عملیاتی به نام index در حافظه و دیتابیس های SQL وجود دارد که بهتر است در مورد آن مطالعه کنید. آرایه های Numpy به سادگی index می شوند و میتوانند انواع مخلتفی مثل float، int، string یا حتی object را داشته باشند اما برای اینکه index کار کند و سرعت بالایی را تجربه کنیم باید نوع مقادیر درون این آرایه ها ثابت و پایدار( consistent ) بماند. دو بلوک کد زیر را در محیط مجازی ای که برای این فصل ساخته اید اجرا کنید تا تفاوت سرعت پایتون و Numpy در عملیات ضرب ماتریسی را ببینید:
import random
def matrix():
A = [[random.random() for _ in range(500)] for _ in range(500)]
B = [[random.random() for _ in range(500)] for _ in range(500)]
C = [[0 for _ in range(500)] for _ in range(500)]
for i in range(500):
for j in range(500):
for k in range(500):
C[i][j] += A[i][k] * B[k][j]
return C
cProfile.run('matrix()')
import numpy as np
def matrix_optimized():
A = np.random.random((500,500))
B = np.random.random((500,500))
# return A @ B
return np.matmul(A,B)
cProfile.run('matrix_optimized()')