2012-03-24 20 views
5

यह सवाल दो भागों (? शायद एक ही समाधान है) है वहाँ एक स्पैर मैट्रिक्स से वेक्टर नमूना करने का एक आसान तरीका? जब मैं 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 करने के लिए?

उत्तर

3

sm[np.random.sample(sm.shape[0], K, replace=False), :] 

प्रयास करें इससे आपको यह पता हो जाता है पंक्तियों की सिर्फ कश्मीर के साथ एक LIL प्रारूप मैट्रिक्स (random.sample द्वारा निर्धारित क्रम में)। मुझे यकीन नहीं है कि यह सुपर-फास्ट है, लेकिन यह वास्तव में पंक्ति से मैन्युअल रूप से पंक्तियों तक पहुंचने से भी बदतर नहीं हो सकता है जैसा कि आप वर्तमान में कर रहे हैं, और शायद परिणामों को पूर्ववत करता है।

+0

यह वास्तव में काम नहीं करता है क्योंकि यह विभिन्न लंबाई में सूचियों की सूची देता है और स्पैस (/ स्पैस नहीं) वैक्टर नहीं। जैसे sm.data [नमूना (xrange (sm.shape [0]), 2)] रिटर्न सरणी ([[1, 2], [8]], dtype = ऑब्जेक्ट) – ScienceFriction

+0

@ विज्ञान विज्ञान वूप्स, आप सही हैं: मैं था एक नमूने पर परीक्षण जहां पंक्तियों में सभी प्रविष्टियां थीं। मैंने कुछ ऐसा जवाब बदल दिया है जो वास्तव में आपको एक चरण में एक स्पैर मैट्रिक्स निकाल देता है। – Dougal

+0

धन्यवाद! एक जादू की तरह काम करता है। – ScienceFriction

संबंधित मुद्दे