Amer Abdallah نشر 3 أغسطس 2021 أرسل تقرير نشر 3 أغسطس 2021 أريد معرفة كيفية إزالة قيم nan من المصفوفة التالية. تبدو المصفوفة الخاصة بي على هذا النحو: array([1400., 1500., 1600., nan, nan, nan, 1700.]) كيف يمكنني إزالة قيم nan من هذه المصفوفة لتصبح النتيجة بالشكل التالي: array([1400., 1500., 1600., 1700.]) 1 اقتباس
0 عبدالله عبدالرحمن11 نشر 3 أغسطس 2021 أرسل تقرير نشر 3 أغسطس 2021 إذا كنت تستخدم numpy لمصفوفاتك ، فيمكنك أيضًا استخدام x = x[numpy.logical_not(numpy.isnan(x))] وبشكلٍ مختصر كالآتي x = x[~numpy.isnan(x)] توضيح تقوم الدالة الداخلية numpy.isnan بإرجاع مصفوفة Boolean أو مصفوفة منطقية بالقيمة صائب True لكل x لا يكون رقماً. ويما أننا نريد عكس ذلك ، فنستخدم المعامل المنطقي للنفي ( ~ ) للحصول على مصفوفة مع قيم صائبة True في كل مكان يكون x رقم ، عكس سابقاً. أخيرًا ، نستخدم هذه المصفوفة المنطقية للفهرسة في المصفوفة الأصلية x ، لاسترداد القيم غير NaN فقط. تعتبر هذه الطريقة الأكثر استخداما ولكن يمكنك استخدام العديد من الطرق الأخرى مثل استخدام دالة filter كالآتي filter(lambda v: v==v, x) حيث أنها تعمل للقوائم lists وايضاً مصفوفة numpy حيث v!=v تكون فقط لNan. اقتباس
0 Ahmed Sharshar نشر 3 أغسطس 2021 أرسل تقرير نشر 3 أغسطس 2021 يمكننا أن نقوم بازالتها بسهولة باستخدام بعض العمليات المنطاقة. تستخدم الدالة isnan لتقوم بفحص كل عنصر في المصفوفة اذا كان قيمته nan ام لا، وتقوم بارجاع قيمه True او False كناتج بحث لكل عنصر حيث تعني True ان قيمه العنصر nan. لذا اذا كنا نريد ازالة العناصر التي قيمتها nan ، يجب أن نقوم بعكس المنطق المستخدم هنا، اي نقوم بعكس كل True الي False حتى نستطيع ازالته، ومن هنا سنستخدم دالة العكس not. لذا يكون الكود المستخدم كالتالي: new_array = new_array[numpy.logical_not(numpy.isnan(new_array))] واذا قمنا بتشغيلة على المصفوفة الخاصة بك تكون النتيجة كالتالي: array([1400., 1500., 1600., 1700.]) يمكنك كذلك انشاء مصفوفة اخري ونقل اليها كل القيم التي لا تساوي nan، لكن هذة الطريقة لن تعدل على المصفوفة الاصلية وانما تخلق مصفوفة جديدة وتحتاج مساحة أكبر لذلك. اقتباس
0 Wael Aljamal نشر 3 أغسطس 2021 أرسل تقرير نشر 3 أغسطس 2021 بالاعتماد على الجزئية أن NaN لاتساوي NaN أي v!=v only for NaN يمكننا عمل فلتر للعناصر بالطريقة التالية: filter(lambda v: v==v, x) هذا يعيد العناصر التي تساوي نفسها (أي الأعداد المنتهية)، تعمل على lists + numpy array اقتباس
2 Ali Haidar Ahmad نشر 3 أغسطس 2021 أرسل تقرير نشر 3 أغسطس 2021 الطريقة الأولى هي استخدام ()numpy.nan و ()numpy.logical_not. فلتكن لدينا المصفوفة التالية: a = numpy.array([2, 8, numpy.nan, 3, 1, numpy.nan]) ولو طبقنا عليها numpy.isnan سوف يعيد لنا نفس المصفوفة لكن بقيم بوليانية بحيث يضع true مكان القيم التي ليست nan و false مكان القيم nan: print(numpy.isnan(a)) # [False False True False False True] الآن لو استخدمنا على الناتج السابق التابع logical_not فسوف يعكس النتائج، أي بدل true سيضع false والعكس: print(numpy.logical_not(numpy.isnan(a))) # [ True True False True True False] الآن يمكننا الاستفادة من الفكرة التالية: e=(np.array([1, 0, 3,4])) e[[True, True, True,False]] # array([1, 0, 3]) لذا يكون الحل كالتالي: import numpy # إنشاؤ المصفوفة a = numpy.array([2, 8, numpy.nan, 3, 1, numpy.nan]) #numpy.logical_not و numpy.isnan(): باستخدام #nan سنقوم بحذف قيم print(numpy.isnan(a)) # [False False True False False True] print(numpy.logical_not(numpy.isnan(a))) # [ True True False True True False] b = a[numpy.logical_not(numpy.isnan(a))] print(b) # [2. 8. 3. 1.] مثال آخر على مصفوفة ثنائية: import numpy # إنشاؤ المصفوفة a = numpy.array([[6, 2, numpy.nan], [2, 6, 1], [numpy.nan, 1, numpy.nan]]) #numpy.logical_not و numpy.isnan(): باستخدام #nan سنقوم بحذف قيم print(numpy.isnan(a)) """ [[False False True] [False False False] [ True False True]] """ print(numpy.logical_not(numpy.isnan(a))) """ [[ True True False] [ True True True] [False True False]] """ b = a[numpy.logical_not(numpy.isnan(a))] print(b) # [6. 2. 2. 6. 1. 1.] أو يمكنك استخدام المعامل ~ بدلاً من logical كالتالي: import numpy a = numpy.array([[12, 5, numpy.nan, 7], [2, 61, 1, numpy.nan], [numpy.nan, 1, numpy.nan, 5]]) a = a[~(numpy.isnan(c))] a #array([12., 5., 7., 2., 61., 1., 1., 5.]) أو من خلال التابع isfinite في نمباي (بنفس المبدأ) : import numpy a = numpy.array([[12, 5, numpy.nan, 7], [2, 61, 1, numpy.nan], [numpy.nan, 1, numpy.nan, 5]]) a[np.isfinite(a)] # array([12., 5., 7., 2., 61., 1., 1., 5.]) 1 اقتباس
السؤال
Amer Abdallah
أريد معرفة كيفية إزالة قيم nan من المصفوفة التالية. تبدو المصفوفة الخاصة بي على هذا النحو:
كيف يمكنني إزالة قيم nan من هذه المصفوفة لتصبح النتيجة بالشكل التالي:
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.