تتطلب عملية تجزئة البيانات عبر محور واحد في NumPy استخدام الدوال المناسبة التي تمكنك من تنفيذ هذه العملية بكفاءة وبدون الحاجة إلى حلقات. في الواقع، يمكنك استخدام دالة np.apply_along_axis()
مع دالة تقوم بتجزئة البيانات على كل صف أو عمود من البيانات بشكل مستقل.
للقيام بذلك، يمكنك إنشاء وظيفة تقوم بتجزئة صف أو عمود من البيانات باستخدام np.histogram()
ثم استخدام np.apply_along_axis()
لتطبيق هذه الوظيفة على كل صف في مصفوفة البيانات. هذا الأسلوب يجعل العملية أكثر فعالية وأقل تعقيدًا.
-
تحويل عمود إلى مصفوفة في R06/03/2024
-
إنشاء وتعديل ملفات XML في C# بسهولة21/02/2024
-
تمرير بيانات TextBox إلى Exe بـ C#01/04/2024
فيما يلي كيفية تحقيق ذلك:
pythonimport 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:
pythonimport 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.