आप उस शून्यिंग को प्राप्त करने के लिए मैट्रिक्स डॉट उत्पाद का उपयोग कर सकते हैं। चूंकि मैट्रिक्स का उपयोग हम बहुत ही दुर्लभ (पंक्तियों/स्तंभों के लिए शून्य के साथ विकर्ण है जो शून्य से बाहर होते हैं), गुणा कुशल होना चाहिए।
आप निम्न कार्यों में से एक की आवश्यकता होगी:
import scipy.sparse
def zero_rows(M, rows):
diag = scipy.sparse.eye(M.shape[0]).tolil()
for r in rows:
diag[r, r] = 0
return diag.dot(M)
def zero_columns(M, columns):
diag = scipy.sparse.eye(M.shape[1]).tolil()
for c in columns:
diag[c, c] = 0
return M.dot(diag)
प्रयोग उदाहरण:
>>> A = scipy.sparse.csr_matrix([[1,0,3,4], [5,6,0,8], [9,10,11,0]])
>>> A
<3x4 sparse matrix of type '<class 'numpy.int64'>'
with 9 stored elements in Compressed Sparse Row format>
>>> A.toarray()
array([[ 1, 0, 3, 4],
[ 5, 6, 0, 8],
[ 9, 10, 11, 0]], dtype=int64)
>>> B = zero_rows(A, [1])
>>> B
<3x4 sparse matrix of type '<class 'numpy.float64'>'
with 6 stored elements in Compressed Sparse Row format>
>>> B.toarray()
array([[ 1., 0., 3., 4.],
[ 0., 0., 0., 0.],
[ 9., 10., 11., 0.]])
>>> C = zero_columns(A, [1, 3])
>>> C
<3x4 sparse matrix of type '<class 'numpy.float64'>'
with 5 stored elements in Compressed Sparse Row format>
>>> C.toarray()
array([[ 1., 0., 3., 0.],
[ 5., 0., 0., 0.],
[ 9., 0., 11., 0.]])
ठीक है, मैं बस की कोशिश की एक '[एक .__ setitem __ ((i, j), 0) मैं जे श्रेणी में जे के लिए सूचकांक में (एशप [1])] 'और' SciPy' ने मुझे बताया कि 'स्पैसएफ़िशियेंसी चेतावनी: एक csr_matrix की स्पर्सिटी संरचना को बदलना महंगा है। lil_matrix अधिक कुशल है। 0 ... –
कोई विचार नहीं है कि scipy के लिए इसका कोई समर्थन है, लेकिन जैसा कि यह एक सीएसआर मैट्रिक्स है, इसे कुशलता से संभाला जा सकता है (कम से कम हाथ से)। एक सवाल यह है कि, क्या आप स्पष्टीकरण पैटर्न को बदलना चाहते हैं, या उन 0 को संख्यात्मक रूप से 0 होना चाहिए? – seberg
मुझे यकीन नहीं है कि स्पष्टीकरण पैटर्न का क्या अर्थ है।मैं scipy.sparse.linalg.spsolve समारोह का उपयोग करके समीकरणों की एक प्रणाली को हल करने के लिए आगे बढ़ता हूं। मुझे उम्मीद है कि यह स्पष्टीकरण पैटर्न, या इसकी कमी को बदलने की जरूरत स्थापित करता है। –