2013-02-27 2 views
21
type(A) 
<class 'scipy.sparse.csc.csc_matrix'> 
A.shape 
(8529, 60877) 
print A[0,:] 
    (0, 25) 1.0 
    (0, 7422) 1.0 
    (0, 26062) 1.0 
    (0, 31804) 1.0 
    (0, 41602) 1.0 
    (0, 43791) 1.0 
print A[1,:] 
    (0, 7044) 1.0 
    (0, 31418) 1.0 
    (0, 42341) 1.0 
    (0, 47125) 1.0 
    (0, 54376) 1.0 
print A[:,0] 
    #nothing returned 

अब मुझे समझ में नहीं आता है जब मैं ए [1 ,:] टाइप करता हूं जो कि दूसरी पंक्ति से तत्वों का चयन करना चाहिए, फिर भी मुझे प्रिंट में पहली पंक्ति के तत्व मिलते हैं। जब मैं ए [:, 0] टाइप करता हूं जो पहले कॉलम को वापस कर लेता है लेकिन मुझे कुछ भी मुद्रित नहीं होता है। क्यूं कर?स्पैर मैट्रिक्स तत्वों का उपयोग कैसे करें?

उत्तर

18

A[1,:] स्वयं आकार (1, 60877) के साथ एक स्पैर मैट्रिक्स है। यह आप क्या प्रिंट कर रहे है, और यह केवल एक पंक्ति है, तो सब पंक्ति निर्देशांक 0.

उदाहरण के लिए कर रहे हैं:

In [12]: a = csc_matrix([[1,0,0,0],[0,0,10,11],[0,0,0,99]]) 

In [13]: a.todense() 
Out[13]: 
matrix([[ 1, 0, 0, 0], 
     [ 0, 0, 10, 11], 
     [ 0, 0, 0, 99]]) 

In [14]: print a[1,:] 
    (0, 2) 10 
    (0, 3) 11 

In [15]: print a 
    (0, 0) 1 
    (1, 2) 10 
    (1, 3) 11 
    (2, 3) 99 

In [16]: print a[1,:].toarray() 
[[ 0 0 10 11]] 

आप स्तंभों का चयन कर सकते हैं, लेकिन अगर कोई अशून्य तत्व हैं कॉलम में, कुछ भी नहीं जब यह print बयान के साथ उत्पादन होता है प्रदर्शित होता है:

In [18]: a[:,3].toarray() 
Out[18]: 
array([[ 0], 
     [11], 
     [99]]) 

In [19]: print a[:,3] 
    (1, 0) 11 
    (2, 0) 99 

In [20]: a[:,1].toarray() 
Out[20]: 
array([[0], 
     [0], 
     [0]]) 

In [21]: print a[:,1] 

पिछले प्रिंट बयान कोई उत्पादन से पता चलता है क्योंकि स्तंभ एक [:, 1] बिना अशून्य तत्व है।

+2

मुद्रण 'एक [0,:]। toarray() 'और भी जानकारीपूर्ण हो सकता है। –

+0

@ लार्समैन: +1, मैंने जोड़ा 'प्रिंट करें [1,:]। Toarray() '। –

+0

क्या कॉलम चुनना संभव नहीं है? – siamii

7

अपने प्रश्न के विवरण से एक अलग तकनीक का उपयोग कर अपने शीर्षक के सवाल का जवाब करने के लिए:

csc_matrix आप विधि .nonzero() देता है।

को देखते हुए:

>>> import numpy as np 
>>> from scipy.sparse.csc import csc_matrix 
>>> 
>>> row = np.array([0, 1, 3]) 
>>> col = np.array([0, 2, 3]) 
>>> data = np.array([1, 4, 16]) 
>>> A = csc_matrix((data, (row, col)), shape=(4, 4)) 

आप द्वारा गैर शून्य आंकड़ों के poniting सूचकांक पहुँच सकते हैं:

>>> rows, cols = A.nonzero() 
>>> rows 
array([0, 1, 3], dtype=int32) 
>>> cols 
array([0, 2, 3], dtype=int32) 

जो तुम तो कभी एक घने बनाने के लिए जरूरत के बिना, अपने डेटा का उपयोग करने का उपयोग कर सकते आपके स्पैर मैट्रिक्स का संस्करण:

>>> [((i, j), A[i,j]) for i, j in zip(*A.nonzero())] 
[((0, 0), 1), ((1, 2), 4), ((3, 3), 16)] 
संबंधित मुद्दे