• 0

كيف يمكنني التحقق مما إذا كانت مصفوفة numpy فارغة أم لا؟

أريد التحقق مما إذا كانت مصفوفة numpy فارغة أم لا، لقد استخدمت الشرط التالي، لكن هذا يفشل إذا كانت المصفوفة كالتالي:

import numpy as np
a = np.array([[]])
if len(a) == 0:
  print('empty')
else:
  print('not empty')

ما الطريقة التي تجعل الشرط يتحقق ويتم طباعة empty؟

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

يمكنك استخدام numpy.ndarray.size. فعن طريق الوصول إلى عدد العناصر في numpy.ndarray باستخدام numpy.ndarray.size. يمكنك تحديد فيما إذا كانت المصفوفة فارغة أم لا حيث، إذا كان عدد العناصر في المصفوفة يساوي 0 ، فإن المصفوفة فارغة:

import numpy as np
empty_array = np.array([])
is_empty = empty_array.size == 0
is_empty # True
################################
empty_array = np.array([1,2])
is_empty = empty_array.size == 0
is_empty # False

حسناً قد تظهر لنا مشكلة عندما يتم تعريف المصفوفة الفارغة بالشكل  np.array(None) حيث أن ناتج تطبيق size سيكون 1، لذا لحل المشكلة:

import numpy as np
empty_array = np.array(None)
is_empty = False if empty_array.size and empty_array.ndim else True
is_empty # True
##########################
import numpy as np
empty_array = np.array([])
is_empty = False if empty_array.size and empty_array.ndim else True
is_empty # True
#########################
import numpy as np
empty_array = np.array([1])
is_empty = False if empty_array.size and empty_array.ndim else True
is_empty # False

ويمكنك كتابة التابع التالي الذي يشمل كل ماسبق:

def elements(array):
    return False if array.ndim and array.size else True
elements(np.array([1]))
#False
elements(np.array([]))
# True
elements(np.array(None))
# True

كما ويمكنك استخدام الدالة np.any، لكن القيد على هذه الوظيفة هو أنها لا تعمل إذا كانت المصفوفة تحتوي على القيمة 0 فيها.

import numpy as np
arr = np.array([])
flag = not np.any(arr)
if flag:
    print('empty')
else:
    print('not empty')
# empty
#############################
arr = np.array(None)
flag = not np.any(arr)
if flag:
    print('empty')
else:
    print('not empty')
# empty
############################
arr = np.array([1])
flag = not np.any(arr)
if flag:
    print('empty')
else:
    print('not empty')
# not empty

أو من خلال تحويلها لقائمة:

import numpy as np
arr = np.array([1])
if len(arr.tolist()) == 0:
    print("Empty")
else: print("Not")

قمنا أولاً بتحويل المصفوفة إلى قائمة باستخدام طريقة tolist (). ثم تحققنا من حجم القائمة باستخدام طريقة len () للتحقق مما إذا كانت المصفوفة فارغة.، لكن في حال تم تعريف المصفوفة من خلال None فسيظهر خطأ لذا لحل المشكلة قمت بتعريف التابع التالي:

def test(a):
    try:
        if len(a.tolist()) == 0:
            return "Empty"
        else: return "Not"
    except:
        return "Empty"
test(np.array([1])) # 'Not'
test(np.array([])) # 'Empty'
test(np.array(None)) # 'Empty'

وأخيراً من خلال التبع shape:

import numpy as np
a = np.array([])
if a.shape[0] == 0:
    print("Empty")

وذلك من خلال التحقق مما إذا كان عدد العناصر في المحور 0 ، أي الصف ، صفراً أم لا.

تمّ تعديل بواسطة Ali Haidar Ahmad
2 اشخاص أعجبوا بهذا

انشر على الشّبكات الاجتماعية


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

يمكنك استخدام الخاصية .size من numpy ولذلك لتنفيذ الكود السابق سيتم تعديله كالتالي

import numpy as np
a = np.array([[]])
if a.aize == 0:
  print('empty')
else:
  print('not empty')

لاحظ أن المصفوفة فارغة عندما ترجع ال a.size رقم 0

ولكن هناك مشكلة أن ال size تقوم بإرجاع واحد عند تنفيذها على np.array(None)

import numpy as np
np.array(None).size
#1

 

تمّ تعديل بواسطة عبدالباسط ابراهيم
خطأ إملائي
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

اذا كانت المصفوفة فارغة empty ، فان حجمها يجب أن يكون  صفرا، لذلك فان اسهل طريقة للتاكد اذا كانت  فارغة ام لا هو أن تقومبالتحقق من حجمها كالتالي:

import numpy as np
a = np.array([])

if a.size == 0:
    print(empty)

مثال تطبيقي:

empty_array = np.array([])
is_empty = empty_array.size == 0

print(is_empty)
OUTPUT
True

nonempty_array = np.array([1, 2, 3])
is_empty = nonempty_array.size == 0

print(is_empty)
OUTPUT
False

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن