2014-10-17 3 views
5

के रूप में numpy matrices के साथ दो शब्दकोशों की तुलना करना मैं यह कहना चाहता हूं कि दो पायथन शब्दकोश बराबर हैं (जिसका अर्थ है: चाबियों की समान मात्रा, और कुंजी से मूल्य के प्रत्येक मैपिंग बराबर है; आदेश महत्वपूर्ण नहीं है)। एक आसान तरीका assert A==B होगा, हालांकि, यह काम नहीं करता है अगर शब्दकोशों के मूल्य numpy arrays हैं। यदि दो शब्दकोश बराबर हैं तो सामान्य में जांचने के लिए मैं एक फ़ंक्शन कैसे लिख सकता हूं?मूल्यहीन

>>> import numpy as np 
>>> A = {1: np.identity(5)} 
>>> B = {1: np.identity(5) + np.ones([5,5])} 
>>> A == B 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

संपादित मुझे पता है कि numpy मैट्रिक्स .all() साथ समानता के लिए जाँच की जाएगी हूँ। मैं जो देख रहा हूं वह isinstance(np.ndarray) की जांच किए बिना, इसके लिए जांच करने का एक सामान्य तरीका है। क्या यह संभव होगा?

NumPy सरणी के बिना संबंधित विषय:

+0

उपयोग कर सकते हैं मुझे लगता है कि आप 'करने के लिए एक [1] सब के सब() == बी [1] सब के सब()' – EdChum

उत्तर

1

इस कोड

>>> import numpy as np 
>>> np.identity(5) 
array([[ 1., 0., 0., 0., 0.], 
     [ 0., 1., 0., 0., 0.], 
     [ 0., 0., 1., 0., 0.], 
     [ 0., 0., 0., 1., 0.], 
     [ 0., 0., 0., 0., 1.]]) 
>>> np.identity(5)+np.ones([5,5]) 
array([[ 2., 1., 1., 1., 1.], 
     [ 1., 2., 1., 1., 1.], 
     [ 1., 1., 2., 1., 1.], 
     [ 1., 1., 1., 2., 1.], 
     [ 1., 1., 1., 1., 2.]]) 
>>> np.identity(5) == np.identity(5)+np.ones([5,5]) 
array([[False, False, False, False, False], 
     [False, False, False, False, False], 
     [False, False, False, False, False], 
     [False, False, False, False, False], 
     [False, False, False, False, False]], dtype=bool) 
>>> 

नोट तुलना का परिणाम पर विचार करें एक मैट्रिक्स, नहीं एक है बूलियन मूल्य। डिक्ट तुलना मूल्यों की तुलना cmp विधियों का उपयोग करके मानों की तुलना करेगी, जिसका अर्थ है कि मैट्रिक्स मानों की तुलना करते समय, निर्देश तुलना एक समग्र परिणाम प्राप्त करेगी। क्या आप क्या करना चाहते समग्र सरणी एक अदिश बूलियन परिणाम में परिणाम संक्षिप्त करने के लिए उपयोग numpy.all है

>>> np.all(np.identity(5) == np.identity(5)+np.ones([5,5])) 
False 
>>> np.all(np.identity(5) == np.identity(5)) 
True 
>>> 

आप इन शब्दकोशों, परीक्षण मूल्य प्रकार की तुलना करने के अगर वे matricies को देखने के लिए अपने स्वयं के समारोह लिखने के लिए की आवश्यकता होगी, और उसके बाद numpy.all का उपयोग करके तुलना करना, अन्यथा == का उपयोग करना। निस्संदेह, आप हमेशा फैंसी प्राप्त कर सकते हैं और यदि आप चाहें तो cmp को उप-वर्गीकरण करना शुरू कर सकते हैं।

+0

मैं बहुत स्पष्ट नहीं था चाहिए रहे हैं इसके बारे में, लेकिन मैं स्पष्ट रूप से प्रकार की जांच किए बिना एक सामान्य तरीके की उम्मीद कर रहा था। आज यह एक सुस्त सरणी है, कल यह एक ऐसा प्रकार है जिसे मैंने आज तक कभी नहीं सुना है। – physicalattraction

+0

मुझे नहीं लगता कि इसके चारों ओर एक रास्ता है, मुझे डर है। यदि आपका (या numpy's या किसी और का) प्रकार गैर-स्केलर लौटने के लिए __cmp__ ओवरराइड करता है, तो मानक पायथन तुलना इसे संभाल नहीं पाएगी। – sirlark

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^