5
這個問題有兩個部分(也許一個解決方案):從一個稀疏矩陣容易矢量的採樣從稀疏矩陣,並且從所述樣品創建一個新的矩陣(蟒)
樣品載體:是否有從稀疏矩陣中抽取矢量的簡單方法? 當我嘗試使用random.sample對行進行採樣時,我得到一個TypeError:稀疏矩陣長度不明確。
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(),,類似:
indxSampls = sample(range(sm.shape[0]), k)
sampledRows = []
for i in indxSampls:
sampledRows+=[sm.getrow(i)]
任何其他有效的/優雅的想法?密集的矩陣大小爲1000x30000並可能更大。
從稀疏矢量的列表構建一個稀疏矩陣:現在想象一下,我有取樣矢量sampledRows的名單,我怎能將它轉換爲不使其緻密稀疏矩陣,將其轉換成列表,然後convet名單它以lil_matrix?
它並不真正工作,因爲它返回不同長度的列表列表,而不是稀疏的(/不稀疏)矢量。例如sm.data [sample(xrange(sm.shape [0]),2)]返回array([[1,2],[8]],dtype = object) – ScienceFriction 2012-03-24 21:57:01
@ScienceFriction哎呀,你是對的:我是測試所有行都有條目的樣本。我已經改變了類似的答案,實際上你可以一步完成一個稀疏矩陣。 – Dougal 2012-03-24 22:00:11
謝謝!奇蹟般有效。 – ScienceFriction 2012-03-24 22:09:45