اذهب إلى المحتوى
  • 0

كيفية إستبدال كل الأصفار في مصفوفة عبر NumPy في بايثون Python؟

Mohssen A Mohssen

السؤال

لدي مصفوفة تحتوي على بعض الأرقام بالشكل التالي:

first_col = [231, 456, 84, 1234, 126, 0, 79, 0, 212, 0]

أريد إستبدال كل الأصفار Zeros الموجودة في هذه المصفوفة بقيمة متوسط العناصر (الأصفار لا يتم إحتسابها ضمن عدد العناصر)، أعلم أنه يمكنني الحصول على متوسط الأرقام (بدون الأصفار) من خلال الكود التالي:

m = np.median(first_col[first_col > 0])

لكن كيف أستبدل كل صفر موجود ضمن المصفوفة بالقيمة m السابق (المتوسط)؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

باستخدام numpy يمكنك فعل ذلك عبر ()np.where :

first_col = np.where(first_col < 1, m, first_col)

في هذه الmethod سيقوم بأخذ شرط كأول parameter. إذا تحقق الشرط عند عنصر سيتم استبدال قيمته بقيمة ثاني parameter والذي هو m في حالتنا.

تم التعديل في بواسطة معاذ قره محمد
تحسين الحل، وتبسيطه
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

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

أي أننا نمرر مصفوفة أصفار و واحدات طولها يساوي طول المصفوفة الأصلية و هو يقوم بالتعديل على كل العناصر التي يقابلها واحد في المصفوفة الممررة.

يمكن القيام بذلك على الشكل التالي:

import numpy as np

first_col = [231, 456, 84, 1234, 126, 0, 79, 0, 212, 0]

first_col = np.array(first_col)

first_col[first_col == 0] = m

إن first_col == 0 ستنشئ مصفوفة طولها بطول first_col و تحوي واحد عندما تكون القيمة صفر و صفر عكس ذلك، و بالتالي هنا سنقوم بالتعديل في كل الأماكن التي عندها القيمة صفر.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

يمكنك استعمال  أمر بواسطة comprehension list و تعويض القيم المنعدمة  بالمتوسط بكل سهولة

new_col = [x if x!=0 else m for x in first_col] # comprehension list انشاء لائحة جديدة عبر 
#احتفظنا بالعناصر غير المنعدمة و عوضنا غيرها ب المتوسط
print(new_col)

 

تم التعديل في بواسطة Ayoub Souad
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...