NumPy (Numerical Python)

Python හි විද්‍යාත්මක සහ සංඛ්‍යාත්මක ගණනය කිරීම් වල අත්තිවාරම.

NumPy යනු කුමක්ද?

NumPy යනු Python සඳහා ඇති මූලිකම library එකකි. එහි ප්‍රධානම අංගය වන්නේ `ndarray` (N-dimensional array) නමැති බලවත් දත්ත ව්‍යුහයයි. සරලව කිවහොත්, NumPy යනු Python වලට "ගණිතමය සුපිරි බලයක්" ලබා දෙන මෙවලමකි.

සාමාන්‍ය Python list එකකට වඩා NumPy array එකක් ඉතා වේගවත් වන අතර, මතකයද වඩාත් කාර්යක්ෂමව භාවිතා කරයි. AI, Data Science, සහ ඉංජිනේරු විද්‍යාවේදී සිදුකරන මිලියන ගණනක් වන ගණනය කිරීම් සඳහා NumPy අත්‍යවශ්‍ය වේ.

ඇනලොජිය: සාමාන්‍ය Python list එකක් යනු එක එක ප්‍රමාණයේ ගල් කැට පිරවූ මල්ලක් වැනිය. NumPy array එකක් යනු එකම ප්‍රමාණයේ සහ බරැති ගඩොල් පිළිවෙලට අසුරන ලද තට්ටුවක් වැනිය. දෙවැන්න හැසිරවීම, ගණනය කිරීම සහ ගබඩා කිරීම වඩාත් පහසු සහ කාර්යක්ෂම වේ.
AI සඳහා NumPy අත්‍යවශ්‍ය ඇයි?
අතිශය වේගවත්

NumPy හි ගණනය කිරීම් C වැනි වේගවත් භාෂාවලින් ලියා ඇති නිසා, සාමාන්‍ය Python වලට වඩා 50x හෝ ඊටත් වඩා වේගවත් වේ.

බලවත් ගණිතමය ශ්‍රිත

Mean, Median, Standard Deviation වැනි සංඛ්‍යානමය ශ්‍රිත වල සිට, Matrix Algebra සඳහා අවශ්‍ය සියලුම මෙවලම් NumPy සතුව ඇත.

අනෙකුත් Libraries වල පදනම

Pandas, Scikit-learn, TensorFlow වැනි සියලුම ප්‍රධාන Data Science සහ AI libraries නිර්මාණය කර ඇත්තේ NumPy මත පදනම්වය.

මූලික භාවිතයන් සහ කේත උදාහරණ
1. NumPy Array එකක් නිර්මාණය කිරීම

විවිධ ක්‍රම භාවිතයෙන් NumPy arrays නිර්මාණය කළ හැක.

import numpy as np

# A. Python list එකකින්
arr_from_list = np.array([1, 2, 3, 4, 5])
print(f"List වලින්: {arr_from_list}")

# B. নির্দিষ্ট පරාසයක සංඛ්‍යා (range) - np.arange(start, stop, step)
arr_arange = np.arange(0, 10, 2) # 0 සිට 10 දක්වා 2න් 2ට
print(f"arange වලින්: {arr_arange}")

# C. බිංදු (zeros) සහ එක (ones) වලින් පිරවූ arrays
arr_zeros = np.zeros((2, 3)) # පේළි 2ක් සහ තීරු 3ක් ඇති බිංදු matrix එකක්
arr_ones = np.ones(5)
print(f"Zeros array:\n{arr_zeros}")

# D. අහඹු සංඛ්‍යා (random numbers)
arr_random = np.random.rand(3, 3) # 0 සහ 1 අතර අහඹු සංඛ්‍යා matrix එකක්
print(f"Random array:\n{arr_random}")

2. Array සමඟ ගණිතමය ක්‍රියා සිදු කිරීම (Vectorization)

NumPy මගින් array එකක ඇති සියලුම உறுப்புகள் මත එකවර ගණනය කිරීම් කිරීමට ඉඩ සලසයි (loop අවශ්‍ය නොවේ). මෙය "Vectorization" ලෙස හැඳින්වේ.

arr = np.array([10, 20, 30, 40, 50])

# සෑම අගයකටම 5ක් එකතු කිරීම
print("Addition:", arr + 5)

# සෑම අගයකම වර්ගමූලය ගැනීම
print("Square Root:", np.sqrt(arr))

3. දත්ත වෙත ප්‍රවේශ වීම (Indexing & Slicing)

Python lists වල මෙන්, array වල ඇති දත්ත වලටද index අංකය මගින් ප්‍රවේශ විය හැක. නමුත් NumPy වලදී මෙය වඩාත් බලවත් වේ.

# 2D Array එකක් (Matrix)
matrix = np.array([
    [11, 12, 13, 14],
    [21, 22, 23, 24],
    [31, 32, 33, 34],
    [41, 42, 43, 44]
])

# දෙවන පේළිය, තුන්වන තීරුවේ ඇති අගය (row 1, column 2)
element = matrix[1, 2] # ප්‍රතිඵලය: 23
print(f"Element at (1,2): {element}")

# කොටසක් (sub-matrix) ලබා ගැනීම (Slicing)
# පේළි 1 සහ 2, තීරු 2 සහ 3 ලබාගැනීම
sub_matrix = matrix[1:3, 2:4]
print(f"Sub-matrix:\n{sub_matrix}")

# කොන්දේසියක් මත පදනම්ව දත්ත තේරීම (Boolean Indexing)
# matrix එකේ 30ට වඩා වැඩි සියලුම අගයන්
greater_than_30 = matrix[matrix > 30]
print(f"30ට වඩා වැඩි අගයන්: {greater_than_30}")
සංඛ්‍යානමය මෙහෙයුම් සහ හැඩය වෙනස් කිරීම
1. සංඛ්‍යානමය ශ්‍රිත (Statistical Functions)

NumPy හි ඇති `sum`, `mean`, `std` වැනි ශ්‍රිත, සම්පූර්ණ array එකට හෝ නිශ්චිත අක්ෂයක් (axis) දිගේ යෙදිය හැක. `axis=0` යනු තීරු (columns) දිගේ වන අතර `axis=1` යනු පේළි (rows) දිගේ වේ.

data = np.array([
    [80, 85], # ශිෂ්‍යයා 1: ගණිතය, විද්‍යාව ලකුණු
    [92, 88], # ශිෂ්‍යයා 2
    [75, 79]  # ශිෂ්‍යයා 3
])

# සම්පූර්ණ array එකේ සාමාන්‍යය
print(f"සමස්ත සාමාන්‍යය: {np.mean(data):.2f}")

# එක් එක් විෂයෙහි සාමාන්‍ය ලකුණු (තීරු දිගේ)
subject_means = np.mean(data, axis=0)
print(f"විෂයයන්ගේ සාමාන්‍ය (ගණිතය, විද්‍යාව): {subject_means}")

# එක් එක් ශිෂ්‍යයාගේ සාමාන්‍ය ලකුණු (පේළි දිගේ)
student_means = np.mean(data, axis=1)
print(f"ශිෂ්‍යයන්ගේ සාමාන්‍ය: {student_means}")

2. Array හැඩය වෙනස් කිරීම (Reshaping)

Machine Learning වලදී දත්ත, මොඩලයට අවශ්‍ය ආකෘතියට (format) ගැලපීම සඳහා `reshape` ශ්‍රිතය නිතරම භාවිතා වේ. උදාහරණයක් ලෙස, රූපයක් යනු 2D array එකක් වන අතර, එය මොඩලයට ලබා දීමට පෙර 1D array එකක් බවට පත් කිරීමට අවශ්‍ය විය හැක.

# 1 සිට 12 දක්වා සංඛ්‍යා ඇති 1D array එකක්
long_array = np.arange(1, 13)
print(f"මුල් array එක: {long_array.shape} -> {long_array}")

# එය පේළි 3ක් සහ තීරු 4ක් ඇති 2D array (matrix) එකක් බවට පත් කිරීම
reshaped_matrix = long_array.reshape(3, 4)
print(f"නව හැඩය: {reshaped_matrix.shape}\n{reshaped_matrix}")
AI සඳහා ප්‍රායෝගික භාවිතය: දත්ත ප්‍රමිතිකරණය (Data Normalization)

Machine learning මොඩලයක් පුහුණු කිරීමට පෙර, විවිධ ඒකක සහ පරාසයන් ඇති දත්ත (උදා: වයස (10-80) සහ ආදායම (50,000-5,000,000)) එකම පරිමාණයකට ගෙන ඒම ඉතා වැදගත් වේ. මෙය "Normalization" හෝ "Standardization" ලෙස හැඳින්වේ. NumPy භාවිතයෙන් මෙය පහසුවෙන් කළ හැක.

ප්‍රමිතිකරණ සූත්‍රය: $ Z = \frac{X - \mu}{\sigma} $ (මෙහි $\mu$ යනු මධ්‍යන්‍යය වන අතර $\sigma$ යනු සම්මත අපගමනයයි)

# උදාහරණ දත්ත: පුද්ගලයන් 5 දෙනෙකුගේ වයස සහ ආදායම (ලක්ෂ වලින්)
# තීරු: [වයස, ආදායම]
feature_data = np.array([
    [25, 4.9],
    [45, 8.0],
    [30, 6.5],
    [52, 11.0],
    [22, 3.5]
])

# 1. එක් එක් තීරුවේ (feature) මධ්‍යන්‍යය (mean) ගණනය කිරීම
mean_values = np.mean(feature_data, axis=0)
print(f"Mean (වයස, ආදායම): {mean_values}")

# 2. එක් එක් තීරුවේ සම්මත අපගමනය (std dev) ගණනය කිරීම
std_values = np.std(feature_data, axis=0)
print(f"Std Dev (වයස, ආදායම): {std_values}")

# 3. Vectorization භාවිතයෙන් දත්ත ප්‍රමිතිකරණය කිරීම
normalized_data = (feature_data - mean_values) / std_values
print(f"\nප්‍රමිතිකරණය කළ දත්ත:\n{normalized_data.round(2)}")

# ප්‍රතිඵලය සැලකිල්ලට ගන්න: දැන් සියලුම දත්ත ආසන්න වශයෙන් -2 සහ +2 අතර කුඩා පරාසයක පවතී.
# මෙමගින් AI මොඩලයට සියලුම features වලට සමාන වැදගත්කමක් ලබා දීමට හැකිවේ.
සාරාංශය

NumPy යනු Python හි දත්ත විද්‍යාවේ සහ AI හි කොඳු නාරටියයි. එහි වේගවත්, කාර්යක්ෂම array ව්‍යුහය, vectorization හැකියාව සහ බලවත් ගණිතමය ශ්‍රිත නිසා, දත්ත සැකසීමේ සිට සංකීර්ණ AI මොඩල නිර්මාණය දක්වා සෑම පියවරකදීම එය අත්‍යවශ්‍ය මෙවලමකි.