में डुप्लिकेट प्रविष्टियों को अनदेखा करते हुए मैंने और csr_matrix
को (data, (rows, cols))
मानों की सूची से प्रलेखन के सुझावों के रूप में प्रारंभ करने का प्रयास किया है।स्पैर मैट्रिक्स
sparse = csc_matrix((data, (rows, cols)), shape=(n, n))
समस्या यह है कि, विधि है कि मैं वास्तव data
, rows
और cols
वैक्टर पैदा करने के लिए है कुछ बातों के लिए डुप्लिकेट का परिचय है। डिफ़ॉल्ट रूप से, scipy डुप्लिकेट प्रविष्टियों के मान जोड़ता है। हालांकि, मेरे मामले में, उन डुप्लीकेटों के पास data
में दिए गए (row, col)
के लिए बिल्कुल वही मान है।
जो मैं प्राप्त करने की कोशिश कर रहा हूं वह दूसरी प्रविष्टि को अनदेखा करना है, यदि पहले से मौजूद है, तो उन्हें जोड़ने के बजाय।
इस तथ्य को अनदेखा करते हुए कि मैं डुप्लीकेट उत्पन्न करने से बचने के लिए पीढ़ी एल्गोरिदम में सुधार कर सकता हूं, क्या एक पैरामीटर या एक स्पैर मैट्रिक्स बनाने का दूसरा तरीका है जो डुप्लिकेट को अनदेखा करता है?
वर्तमान में data = [4, 4]; cols = [1, 1]; rows = [1, 1];
साथ दो प्रविष्टियों एक विरल मैट्रिक्स (1,1)
पर जो मूल्य 8
है, जबकि वांछित मान 4
है उत्पन्न करते हैं।
>>> c = csc_matrix(([4, 4], ([1,1],[1,1])), shape=(3,3))
>>> c.todense()
matrix([[0, 0, 0],
[0, 8, 0],
[0, 0, 0]])
मैं भी पता है कि मैं उन्हें एक 2-आयामी numpy unique
फ़ंक्शन का उपयोग करके फ़िल्टर कर सकते हैं, लेकिन सूचियों काफी बड़ी तो यह वास्तव में एक मान्य विकल्प नहीं है।
प्रश्न के अन्य संभावित उत्तर: क्या डुप्लिकेट के साथ क्या करना है यह निर्दिष्ट करने का कोई तरीका है? यानी min
या max
को डिफ़ॉल्ट sum
के बजाय रखते हुए?
मुझे पूरा यकीन है कि उत्तर नहीं है, डुप्लिकेट के लिए व्यवहार को बदलने का कोई अंतर्निहित तरीका नहीं है। आपको 'np.unique' के उपयोग को हटाने पर बहुत तेज़ नहीं होना चाहिए, भले ही आपकी सूचियां कितनी बड़ी हों, भद्दा उन्हें अरणों में परिवर्तित करने जा रही है और हुड के नीचे समान ऑपरेशन कर रही है, इसलिए कोई कारण नहीं है कि आप कोशिश नहीं करनी चाहिए। – Jaime
'np.unique' 1 डी है, इसलिए इन 2 डी निर्देशांकों को संभालने के लिए कुछ अतिरिक्त प्रयास की आवश्यकता होगी। – hpaulj
यह सच है, लेकिन जैसे चाल [इस] (http://stackoverflow.com/questions/16970982/find-unique-rows-in-numpy-array) यह 2 डी बनाते हैं। –