मैं कैसे जांच सकता हूं कि एक सुन्न सरणी खाली है या नहीं?


169

मैं कैसे जांच सकता हूं कि एक सुन्न सरणी खाली है या नहीं?

मैंने निम्न कोड का उपयोग किया है, लेकिन यह विफल रहता है यदि सरणी में शून्य होता है।

if not self.Definition.all():

क्या इसका समाधान है?

if self.Definition == array( [] ):

6
len(array( [] ))है 0. len(array( [0] )है 1.
स्टीवन रूम्बल्स्की

3
क्या आप शून्य-लंबाई वाले सरणी के लिए परीक्षण करना चाहते हैं, एक सरणी जिसमें सभी शून्य हैं, या दोनों हैं? 'खाली' की आपकी परिभाषा क्या है?
जॉन लियोन

12
@StevenRumbalski: लेकिन len(array([[]])1 भी है!
स्ट्रैपटर

len()पहले अक्ष में आयामों की संख्या देता है। लेकिन एक सरणी में पहले अक्ष में एक गैर-शून्य आयाम हो सकता है लेकिन फिर भी खाली हो सकता है यदि यह किसी अन्य अक्ष में शून्य आयाम है। sizeबेहतर है क्योंकि यह सभी अक्षों का उत्पाद है।
21

जवाबों:


303

आप हमेशा .sizeविशेषता पर एक नज़र डाल सकते हैं । इसे पूर्णांक के रूप में परिभाषित किया गया है , और शून्य है ( 0) जब एरे में कोई तत्व नहीं हैं:

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

if a.size == 0:
    # Do something when `a` is empty

4
यह सुन्न के लिए बहुत अच्छा है, लेकिन यह दुर्भाग्यपूर्ण है कि इसे सूचियों के लिए अस्वाभाविक माना जाता है। सूचियों के लिए चर्चा देखें: stackoverflow.com/questions/53513/… सुन्न सरणियों और सूचियों के लिए एक ही पैटर्न का उपयोग करना अच्छा होगा।
एरिक

सामान्य रूप से NumPy कोड सूची, या वीज़ा-वर्सा पर ठीक से काम नहीं करता है। यदि आप सूचियों बनाम न्यूमपी सरणियों का उपयोग कर रहे हैं तो आपको एक अलग तरीके से कोड लिखना होगा।
21

22

http://www.scipy.org/Tentative_NumPy_Tutorial#head-6a1bc005bd80e1b19f812e1e64e0d25d50f99fe2

NumPy की मुख्य वस्तु सजातीय बहुआयामी सरणी है। Numpy आयामों को अक्ष कहा जाता है। कुल्हाड़ियों की संख्या रैंक है। Numpy के सरणी वर्ग को ndarray कहा जाता है। इसे उपनाम उपनाम से भी जाना जाता है। Ndarray ऑब्जेक्ट की अधिक महत्वपूर्ण विशेषताएं हैं:

ndarray.ndim
सरणी की कुल्हाड़ियों (आयामों) की संख्या। पायथन दुनिया में, आयामों की संख्या को रैंक के रूप में संदर्भित किया जाता है।

सरणी
के आयाम ndarray.shape । यह प्रत्येक आयाम में सरणी के आकार को इंगित करने वाले पूर्णांकों का एक समूह है। एन पंक्तियों और एम कॉलम के साथ एक मैट्रिक्स के लिए, आकार होगा (एन, एम)। आकार टपल की लंबाई इसलिए रैंक, या आयामों की संख्या, ndim है।


सरणी के तत्वों की कुल संख्या ndarray.size । यह आकार के तत्वों के उत्पाद के बराबर है।


10

एक चेतावनी, यद्यपि। ध्यान दें कि np.array (कोई नहीं) .size रिटर्न 1! इसका कारण यह है a.size है के बराबर है np.prod (a.shape), np.array (कोई नहीं) .shape है (), और एक खाली उत्पाद 1 है।

>>> import numpy as np
>>> np.array(None).size
1
>>> np.array(None).shape
()
>>> np.prod(())
1.0

इसलिए, मैं परीक्षण करने के लिए निम्नलिखित का उपयोग करता हूं यदि एक सुन्न सरणी में तत्व हैं:

>>> def elements(array):
    ...     return array.ndim and array.size

>>> elements(np.array(None))
0
>>> elements(np.array([]))
0
>>> elements(np.zeros((2,3,4)))
24

8
Noneऑब्जेक्ट युक्त सरणी खाली सरणी नहीं है, आगे के विवरण के लिए यहां उत्तर देखें
DrBwts

1
@DrBwts जो इस उत्तर के लिए प्रासंगिक नहीं है।
vidstige

@DrBwts उनकी सरणी में Noneऑब्जेक्ट नहीं है । इसके आकार को देखो।
नवीन

आकृति के साथ सरणी ()स्केलर सरणियां हैं, जिनमें एक तत्व (स्केलर) होता है। इस उदाहरण में, अदिश राशि हैNone ( Noneइसका कोई विशेष अर्थ नहीं है, यह सिर्फ एक ऑब्जेक्ट सरणी है)। यह इस बात पर निर्भर करता है कि आप क्या कर रहे हैं, लेकिन आप सबसे अधिक संभावना है कि स्केलर सरणियों को खाली नहीं होने देना चाहते हैं।
21

-1

अगर कोई सरणी है तो हम क्यों जाँचना चाहेंगे empty? एरेस उसी सूची में नहीं बढ़ता या सिकुड़ता है जो करते हैं। एक 'खाली' ऐरे से शुरू होता है, और इसके साथ बढ़ना np.appendएक लगातार नौसिखिया त्रुटि है।

if alist:अपने बूलियन मूल्य पर टिका में एक सूची का उपयोग करना :

In [102]: bool([])                                                                       
Out[102]: False
In [103]: bool([1])                                                                      
Out[103]: True

लेकिन एक सरणी के साथ भी ऐसा ही करने की कोशिश की जाती है (संस्करण 1.18 में):

In [104]: bool(np.array([]))                                                             
/usr/local/bin/ipython3:1: DeprecationWarning: The truth value 
   of an empty array is ambiguous. Returning False, but in 
   future this will result in an error. Use `array.size > 0` to 
   check that an array is not empty.
  #!/usr/bin/python3
Out[104]: False

In [105]: bool(np.array([1]))                                                            
Out[105]: True

और bool(np.array([1,2])कुख्यात अस्पष्टता त्रुटि पैदा करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.