2013-01-17 9 views
6

मैं numpy सरणी के साथ एक स्पैर मैट्रिक्स शुरू करना चाहता हूँ।numpy.NaN के साथ एक scipy.sparse मैट्रिक्स शुरू करने का सबसे तेज़ तरीका क्या है?

a= np.array([[np.NaN,np.NaN,10]]) 
zero_a= np.array([[0,0,10]]) 
spr_a = lil_matrix(a) 
zero_spr_a = lil_matrix(zero_a) 
print repr(spr_a) 
print repr(zero_spr_a) 

उत्पादन

 
1x3 sparse matrix of type 'type 'numpy.float64'' 
    with 3 stored elements in LInked List format 
1x3 sparse matrix of type 'type 'numpy.int64'' 
    with 1 stored elements in LInked List format 
0 के साथ सरणी के लिए

है, वहाँ केवल 1 तत्व विरल में जमा हो जाती है: numpy सरणी, एक विरल मैट्रिक्स प्रारंभिक कोड निम्नलिखित के रूप में शून्य मेरे कार्यक्रम के लिए के रूप में NaN शामिल मैट्रिक्स। लेकिन NaN सरणी में संग्रहीत 3 तत्व हैं, एसएसी मैट्रिक्स के लिए NaN को शून्य के रूप में कैसे इलाज करें?

उत्तर

2

स्पैर मैट्रिस में खाली मान के रूप में शून्य का उपयोग कोड में गहराई से शामिल है, इसलिए दुर्भाग्य से इसे बदलने में बहुत आसान नहीं है।

सबसे पहले, मैं NaN या स्पैर मैट्रिस में खाली मूल्य के रूप में अन्य मूल्य के इलाज की आवश्यकता पर पुनर्विचार करता हूं। शायद आपके कोड में एक और तरीका है?

यदि आपको वास्तव में स्पैर मैट्रिस में खाली मान बदलना होगा, तो आपको lil_matrix या यहां तक ​​कि spmatrix पर आधारित एक नई कक्षा को परिभाषित करना होगा। सबसे महत्वपूर्ण बात यह है कि आपको get nnz() विधि को बदलने की आवश्यकता है, जो परिभाषित करता है कि कितने अंक शून्य हैं। लेकिन आपको मैट्रिक्स को फिर से परिभाषित करने की भी आवश्यकता है, क्योंकि इसे ऑब्जेक्ट डाइटपे के np.matrix के रूप में डाला गया है, और प्रक्रिया में शून्य साफ़ हो गए हैं।

4

यदि आप करना चाहते हैं तो अपने डेटा से एक स्पैर मैट्रिक्स बनाएं, NaN के साथ व्यवहार करें जैसे कि वे शून्य थे, आप निम्न कार्य कर सकते थे। सबसे पहले, की सुविधा देता है उस में कई np.nan के साथ एक यादृच्छिक सारिणी निर्मित:

>>> indices = np.nonzero(~np.isnan(a)) 
>>> sps = scipy.sparse.coo_matrix((a[indices], indices), shape=a.shape) 
>>> sps 
<5x5 sparse matrix of type '<type 'numpy.float64'>' 
    with 14 stored elements in COOrdinate format> 

और जांच करने के लिए वे एक ही हैं:

>>> nans = np.random.randint(0, 2, size=(5,5)) 
>>> a = np.ones((5,5)) 
>>> a = np.where(nans, np.nan, a) 
>>> a 
array([[ 1., 1., 1., 1., nan], 
     [ nan, nan, nan, 1., 1.], 
     [ nan, nan, 1., 1., nan], 
     [ 1., 1., 1., 1., nan], 
     [ 1., nan, 1., nan, nan]]) 

इस सीओओ प्रारूप में विरल बनाने के लिए, यह के रूप में आसान के रूप में है:

>>> sps.toarray() 
array([[ 1., 1., 1., 1., 0.], 
     [ 0., 0., 0., 1., 1.], 
     [ 0., 0., 1., 1., 0.], 
     [ 1., 1., 1., 1., 0.], 
     [ 1., 0., 1., 0., 0.]]) 

यद्यपि आपका NaN रों अब चले गए हैं ...

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

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