البرمجة

تجزئة البيانات في NumPy

تتطلب عملية تجزئة البيانات عبر محور واحد في NumPy استخدام الدوال المناسبة التي تمكنك من تنفيذ هذه العملية بكفاءة وبدون الحاجة إلى حلقات. في الواقع، يمكنك استخدام دالة np.apply_along_axis() مع دالة تقوم بتجزئة البيانات على كل صف أو عمود من البيانات بشكل مستقل.

للقيام بذلك، يمكنك إنشاء وظيفة تقوم بتجزئة صف أو عمود من البيانات باستخدام np.histogram() ثم استخدام np.apply_along_axis() لتطبيق هذه الوظيفة على كل صف في مصفوفة البيانات. هذا الأسلوب يجعل العملية أكثر فعالية وأقل تعقيدًا.

فيما يلي كيفية تحقيق ذلك:

python
import numpy as np # تعريف البيانات الأولية arr = np.random.randn(100, 100) nbins = 10 # وظيفة لتجزئة صف أو عمود def bin_row_or_column(data): hist, _ = np.histogram(data, bins=nbins) return hist # تطبيق الوظيفة على كل صف في البيانات binned = np.apply_along_axis(bin_row_or_column, axis=1, arr=arr) # بعد ذلك ، يمكنك استخدام المصفوفة "binned" بالطريقة التي تناسب احتياجاتك

هذا الكود يقوم بتجزئة البيانات على طول كل صف في arr باستخدام الوظيفة bin_row_or_column() ، والتي تستخدم np.histogram() لتوليد التوزيعات الموجهة. ثم يتم تخزين النتائج في مصفوفة binned للاستخدام فيما بعد.

هذا الأسلوب يجعل الكود أكثر فعالية ويتجنب الحاجة إلى حلقة for التي تتطلبها النسخة الأصلية من الكود.

المزيد من المعلومات

بالتأكيد، هذا الأسلوب يوفر حلاً أكثر فعالية وسهولة في تجزئة البيانات عبر محور واحد في NumPy. بالإضافة إلى ذلك، يمكنك تحسين أداء الكود عن طريق استخدام وظيفة محسنة لتجزئة البيانات.

فلنقم بتعديل الكود لاستخدام وظيفة مخصصة لتجزئة البيانات بشكل أكثر فعالية باستخدام عمليات متجهية في NumPy:

python
import numpy as np # تعريف البيانات الأولية arr = np.random.randn(100, 100) nbins = 10 # وظيفة لتجزئة صف أو عمود باستخدام عمليات متجهية في NumPy def bin_row_or_column(data): # حساب الحدود الخاصة بالبنود باستخدام np.linspace() بدلاً من np.histogram() bin_edges = np.linspace(data.min(), data.max(), nbins+1) # استخدام np.digitize() لتحديد البند الذي تنتمي إليه كل قيمة digitized = np.digitize(data, bin_edges) # حساب التوزيع النهائي باستخدام np.bincount() لعد القيم في كل بند hist = np.bincount(digitized, minlength=nbins) return hist # تطبيق الوظيفة على كل صف في البيانات binned = np.apply_along_axis(bin_row_or_column, axis=1, arr=arr) # بعد ذلك ، يمكنك استخدام المصفوفة "binned" بالطريقة التي تناسب احتياجاتك

هذا التحسين يستخدم الوظائف المتاحة في NumPy للقيام بعملية التجزئة بشكل أكثر فعالية. باستخدام np.linspace() يتم حساب حدود البنود بشكل دقيق بدلاً من افتراض قيم ثابتة للبنود. ثم، يتم استخدام np.digitize() لتحديد البند الذي تنتمي إليه كل قيمة بدلاً من استخدام np.histogram()، وأخيرًا يتم استخدام np.bincount() لعد القيم في كل بند.

باستخدام هذا التحسين، يمكنك تحسين أداء الكود وجعله أكثر قوة ومرونة في التعامل مع بياناتك، مما يجعل عملية تجزئة البيانات أسهل وأكثر فعالية في NumPy.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر