यह सवाल दो भागों (? शायद एक ही समाधान है) है वहाँ एक स्पैर मैट्रिक्स से वेक्टर नमूना करने का एक आसान तरीका? जब मैं random.sample का उपयोग करके लाइनों का नमूना देने की कोशिश कर रहा हूं, मुझे एक टाइप एरर मिलता है: स्पैर मैट्रिक्स लंबाई संदिग्ध है।आसान नमूने, और नमूना से एक नया मैट्रिक्स बनाने (अजगर)
indxSampls = sample(range(sm.shape[0]), k)
sampledRows = []
for i in indxSampls:
sampledRows+=[sm.getrow(i)]
किसी भी अन्य कुशल/सुरुचिपूर्ण विचार:
from random import sample
import numpy as np
from scipy.sparse import lil_matrix
K = 2
m = [[1,2],[0,4],[5,0],[0,8]]
sample(m,K) #works OK
mm = np.array(m)
sample(m,K) #works OK
sm = lil_matrix(m)
sample(sm,K) #throws exception TypeError: sparse matrix length is ambiguous.
मेरे वर्तमान समाधान मैट्रिक्स में पंक्तियों की संख्या से नमूना है, तो getrow का उपयोग() ,, की तरह कुछ करने के लिए है? घने मैट्रिक्स आकार 1000x30000 है और यह बड़ा हो सकता है।
विरल वैक्टर की सूची में से एक विरल मैट्रिक्स का निर्माण: अब कल्पना मैं नमूना वैक्टर sampledRows की सूची है, मैं इसे कैसे यह घना बिना एक विरल मैट्रिक्स में बदल सकते हैं, इस सूची में और उसके बाद Convet की सूची में कन्वर्ट यह lil_matrix करने के लिए?
यह वास्तव में काम नहीं करता है क्योंकि यह विभिन्न लंबाई में सूचियों की सूची देता है और स्पैस (/ स्पैस नहीं) वैक्टर नहीं। जैसे sm.data [नमूना (xrange (sm.shape [0]), 2)] रिटर्न सरणी ([[1, 2], [8]], dtype = ऑब्जेक्ट) – ScienceFriction
@ विज्ञान विज्ञान वूप्स, आप सही हैं: मैं था एक नमूने पर परीक्षण जहां पंक्तियों में सभी प्रविष्टियां थीं। मैंने कुछ ऐसा जवाब बदल दिया है जो वास्तव में आपको एक चरण में एक स्पैर मैट्रिक्स निकाल देता है। – Dougal
धन्यवाद! एक जादू की तरह काम करता है। – ScienceFriction