ভেরিয়েবলটি কোনও নয় বা নম্পি.আররে রয়েছে কিনা তা পরীক্ষা করার সময় ভ্যালুআরআর


104

আমি ভেরিয়েবলটি না বা নম্পি.আররে আছে কিনা তা পরীক্ষা করতে চাই। আমি এটি check_aকরতে ফাংশন বাস্তবায়ন করেছি ।

def check_a(a):
    if not a:
        print "please initialize a"

a = None
check_a(a)
a = np.array([1,2])
check_a(a)

তবে, এই কোডটি ভ্যালুআরারের উত্থাপন করে। সোজা এগিয়ে উপায় কি?

ValueError                                Traceback (most recent call last)
<ipython-input-41-0201c81c185e> in <module>()
      6 check_a(a)
      7 a = np.array([1,2])
----> 8 check_a(a)

<ipython-input-41-0201c81c185e> in check_a(a)
      1 def check_a(a):
----> 2     if not a:
      3         print "please initialize a"
      4 
      5 a = None

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

2
এটি ValueErrorএকটি সাধারণ numpyপ্রশ্ন common এর অর্থ not a(এই ক্ষেত্রে) 2 টি মান সহ একটি বুলিয়ান অ্যারে তৈরি হয়। এই বুলিয়ান অ্যারেটি ifশর্ত হিসাবে ব্যবহার করা যায় না ! is Noneবিকল্প জানা ভাল, কিন্তু আপনার কাছে এই ত্রুটি বুঝতে হবে।
এইচপলজ

@ এইচপলজ: বেশ নয় - আপনি ওভারলোড করতে পারবেন না not, সুতরাং ত্রুটিটি আসলে ঘটে যখন notঅ্যারেটিকে একটি একক বুলিয়ান হিসাবে বিবেচনা করার চেষ্টা করে এবং তা খুঁজে বের করতে পারে না can't যদি এটি ~aহত তবে এটি নম্পপির ওভারলোডটি ব্যবহার করতে পারত এবং যখন ifএকক বুলিয়ান হিসাবে অবহেলিত অ্যারে ব্যবহার করার চেষ্টা করে ব্যর্থ হত failed
ব্যবহারকারী 2357112

উত্তর:


174

অন্যান্য সম্ভাব্য মানগুলির সত্যতার মান আছে not aকিনা aতা Noneধরে নেওয়া যায় কিনা তা পরীক্ষার জন্য ব্যবহার করে । তবে, বেশিরভাগ নুমপি অ্যারেগুলির কোনও সত্যই মূল্য নেই এবং এগুলি প্রয়োগ করা যায় না।aTruenot

আপনি যদি কোনও বিষয় কিনা তা পরীক্ষা করতে চান Noneতবে সবচেয়ে সাধারণ, নির্ভরযোগ্য উপায় হ'ল আক্ষরিক isবিপরীতে একটি চেক ব্যবহার করা None:

if a is None:
    ...
else:
    ...

এটি সত্য মানের মূল্যযুক্ত বস্তুর উপর নির্ভর করে না, সুতরাং এটি NumPy অ্যারেগুলির সাথে কাজ করে।

মনে রাখবেন পরীক্ষাটি হতে হবে is, নয় ==isএকটি বস্তু পরিচয় পরীক্ষা। ==আর্গুমেন্ট যা বলুক না কেন, এবং নুমপি অ্যারে বলে যে এটি একটি সম্প্রচারিত উপাদান হিসাবে সমতা তুলনা করে, বুলিয়ান অ্যারের উত্পাদন করে:

>>> a = numpy.arange(5)
>>> a == None
array([False, False, False, False, False])
>>> if a == None:
...     pass
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous.
 Use a.any() or a.all()

জিনিসের অন্যদিকে, আপনি যদি কোনও বস্তু নুমপি অ্যারে কিনা তা পরীক্ষা করতে চান তবে আপনি এর প্রকারটি পরীক্ষা করতে পারেন:

# Careful - the type is np.ndarray, not np.array. np.array is a factory function.
if type(a) is np.ndarray:
    ...
else:
    ...

আপনি এটিও ব্যবহার করতে পারেন isinstanceযা Trueসেই ধরণের সাবক্লাসের জন্যও ফিরে আসবে (যদি এটি আপনি চান তবে)। কতটা ভয়ানক এবং বেমানান np.matrixতা বিবেচনা করে আপনি আসলে এটি নাও পেতে পারেন:

# Again, ndarray, not array, because array is a factory function.
if isinstance(a, np.ndarray):
    ...
else:
    ...    

4
আপনি কোনটি "সেরা" সমাধানটি সুপারিশ করেন?
মনিকা হেডনেক

2

আপনি যদি খুব অনুরূপ কিছু করার চেষ্টা করছেন:, a is not Noneএকই সমস্যাটি সামনে আসে। এটি হ'ল নম্পি অভিযোগ করেন যে একজনকে অবশ্যই ব্যবহার করা উচিত a.anyবা a.all

একটি কার্যকারণ হ'ল:

if not (a is None):
    pass

খুব সুন্দর নয়, তবে এটি কাজটি করে।


0

আপনি অবজেক্টের আকার আছে কিনা তা দেখতে পাচ্ছেন

def check_array(x):
    try:
        x.shape
        return True
    except:
        return False

1
ডাউনভোটেড কারণ: অন্যান্য ধরণের আকৃতির বৈশিষ্ট্যও থাকতে পারে এবং এগুলির বিভিন্ন অর্থ হতে পারে।
হার্বার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.