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

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

Amer Abdallah

السؤال

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

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

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

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

Recommended Posts

  • 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

 

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

  • 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
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 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

 

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...