کتابخانه ی 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()')