कैसे खस्ता मैट्रिक्स के लिए numpy.matrix या सरणी को बदलने के लिए


86

SciPy विरल मैट्रिक्स के लिए, कोई व्यक्ति NumPy मैट्रिक्स या सरणी में रूपांतरित todense()या toarray()परिवर्तित कर सकता है । उलटा करने के लिए क्या कार्य हैं?

मैंने खोज की, लेकिन यह पता नहीं चला कि कौन सा कीवर्ड सही हिट होना चाहिए।

जवाबों:


127

एक विरल मैट्रिक्स को शुरू करते समय आप एक तर्क के रूप में एक संख्यात्मक सरणी या मैट्रिक्स पास कर सकते हैं। CSR मैट्रिक्स के लिए, उदाहरण के लिए, आप निम्न कार्य कर सकते हैं।

>>> import numpy as np
>>> from scipy import sparse
>>> A = np.array([[1,2,0],[0,0,3],[1,0,4]])
>>> B = np.matrix([[1,2,0],[0,0,3],[1,0,4]])

>>> A
array([[1, 2, 0],
       [0, 0, 3],
       [1, 0, 4]])

>>> sA = sparse.csr_matrix(A)   # Here's the initialization of the sparse matrix.
>>> sB = sparse.csr_matrix(B)

>>> sA
<3x3 sparse matrix of type '<type 'numpy.int32'>'
        with 5 stored elements in Compressed Sparse Row format>

>>> print sA
  (0, 0)        1
  (0, 1)        2
  (1, 2)        3
  (2, 0)        1
  (2, 2)        4

2
उच्च आयामी सरणियों के बारे में क्या?
निर्मल

मुझे अपने मैट्रिक्स के लिए मेमोरी त्रुटि (~ 25,000x25,000) मिलती है। इसके अलावा, जब मैं आवेदन करता हूं तो मेमोरी की खपत पागल की तरह sparse.csr_matrix
बढ़ जाती है

23

डराने में कई विरल मैट्रिक्स कक्षाएं हैं।

bsr_matrix (arg1 [, shape, dtype, copy, blockize]) ब्लॉक स्पार्स रो मैट्रिक्स
coo_matrix (arg1 [, shape, dtype, copy]) COOrdinate फॉर्मेट में एक स्पार्स मैट्रिक्स।
csc_matrix (ARG1 [, आकार, dtype, कॉपी]) संपीडित विरल स्तंभ मैट्रिक्स
csr_matrix (ARG1 [, आकार, dtype, नकल]) संपीडित विरल पंक्ति मैट्रिक्स
dia_matrix (ARG1 [, आकार, dtype, नकल]) विकर्ण भंडारण के साथ विरल मैट्रिक्स
dok_matrix (arg1 [, shape, dtype, copy]) कुंजी आधारित विरल मैट्रिक्स का शब्दकोश।
lil_matrix (arg1 [, shape, dtype, copy]) पंक्ति-आधारित लिंक्ड सूची विरल मैट्रिक्स

उनमें से कोई भी रूपांतरण कर सकता है।

import numpy as np
from scipy import sparse
a=np.array([[1,0,1],[0,0,1]])
b=sparse.csr_matrix(a)
print(b)

(0, 0)  1
(0, 2)  1
(1, 2)  1

Http://docs.scipy.org/doc/scipy/reference/sparse.html#usage-information देखें ।


0

व्युत्क्रम के लिए, फ़ंक्शन है inv(A), लेकिन मैं इसका उपयोग करने की अनुशंसा नहीं करूंगा, क्योंकि विशाल मैट्रिसेस के लिए यह बहुत ही कम्प्यूटेशनल रूप से महंगा और अस्थिर है। इसके बजाय, आपको व्युत्क्रम का उपयोग करना चाहिए, या यदि आप Ax = b को हल करना चाहते हैं, तो आपको वास्तव में A -1 की आवश्यकता नहीं है ।


4
सवाल पूछता है कि कैसे खुरचनी मैट्रिक्स / सरणी का उपयोग करके स्कार्पी विरल मैट्रिक्स उत्पन्न किया जाए, मैट्रिक्स ऑपरेशन के रूप में उलटा नहीं।
वर्जिल मिंग

0

Python में, Scipy लाइब्रेरी का उपयोग 2-D NumPy मैट्रिक्स को एक Sparse मैट्रिक्स में बदलने के लिए किया जा सकता है। सांख्यिक डेटा के लिए SciPy 2-D विरल मैट्रिक्स पैकेज scipy.sparse है

Scipy.sparse पैकेज 2-आयामी मैट्रिक्स से निम्न प्रकार के स्पार्स मैट्रिसेस बनाने के लिए विभिन्न कक्षाएं प्रदान करता है :

  1. ब्लॉक स्पर्स रो मैट्रिक्स
  2. COOrdinate प्रारूप में एक विरल मैट्रिक्स।
  3. संपीड़ित विरल कॉलम मैट्रिक्स
  4. संपीड़ित विरल पंक्ति मैट्रिक्स
  5. DIAgonal स्टोरेज के साथ स्पार्स मैट्रिक्स
  6. कुंजी आधारित विरल मैट्रिक्स का शब्दकोश।
  7. पंक्ति-आधारित सूची स्पार्स मैट्रिक्स
  8. यह वर्ग सभी विरल मैट्रिसेस के लिए बेस क्लास प्रदान करता है।

CSR (संपीड़ित विरल पंक्ति) या CSC (संपीड़ित विरल स्तंभ) प्रारूप कुशल पहुंच और मैट्रिक्स संचालन का समर्थन करते हैं।

Numpy मैट्रिक्स को संपीड़ित विरल स्तंभ (CSC) मैट्रिक्स और संपीड़ित विरल पंक्ति (CSR) मैट्रिक्स में Scipy कक्षाओं का उपयोग करने के लिए उदाहरण कोड

import sys                 # Return the size of an object in bytes
import numpy as np         # To create 2 dimentional matrix
from scipy.sparse import csr_matrix, csc_matrix 
# csr_matrix: used to create compressed sparse row matrix from Matrix
# csc_matrix: used to create compressed sparse column matrix from Matrix

एक 2-D Numpy मैट्रिक्स बनाएं

A = np.array([[1, 0, 0, 0, 0, 0],\
              [0, 0, 2, 0, 0, 1],\
              [0, 0, 0, 2, 0, 0]])
print("Dense matrix representation: \n", A)
print("Memory utilised (bytes): ", sys.getsizeof(A))
print("Type of the object", type(A))

मैट्रिक्स और अन्य विवरण प्रिंट करें:

Dense matrix representation: 
 [[1 0 0 0 0 0]
 [0 0 2 0 0 1]
 [0 0 0 2 0 0]]
Memory utilised (bytes):  184
Type of the object <class 'numpy.ndarray'>

Csr_matrix वर्ग का उपयोग करते हुए संकुचित विरल पंक्ति मैट्रिक्स प्रतिनिधित्व के लिए मैट्रिक्स A को परिवर्तित करना :

S = csr_matrix(A)
print("Sparse 'row' matrix: \n",S)
print("Memory utilised (bytes): ", sys.getsizeof(S))
print("Type of the object", type(S))

प्रिंट स्टेटमेंट का आउटपुट:

Sparse 'row' matrix:
(0, 0) 1
(1, 2) 2
(1, 5) 1
(2, 3) 2
Memory utilised (bytes): 56
Type of the object: <class 'scipy.sparse.csr.csc_matrix'>

Csc_matrix क्लास का उपयोग करके मैट्रिक्स को एक संकुचित स्पार्स कॉलम मैट्रिक्स प्रतिनिधित्व में परिवर्तित करना:

S = csc_matrix(A)
print("Sparse 'column' matrix: \n",S)
print("Memory utilised (bytes): ", sys.getsizeof(S))
print("Type of the object", type(S))

प्रिंट स्टेटमेंट का आउटपुट:

Sparse 'column' matrix:
(0, 0) 1
(1, 2) 2
(2, 3) 2
(1, 5) 1
Memory utilised (bytes): 56
Type of the object: <class 'scipy.sparse.csc.csc_matrix'>

जैसा कि देखा जा सकता है कि संपीड़ित मैट्रेस का आकार 56 बाइट्स है और मूल मैट्रिक्स का आकार 184 बाइट्स है।

अधिक विस्तृत विवरण और कोड उदाहरणों के लिए कृपया इस लेख को देखें: https://limitlessdatascience.wordpress.com/2020/11/26/sparse-matrix-in-machine-learning/

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