Numpy 50Kx50K稀疏矩阵
我需要持有一个50000x50000稀疏矩阵/2d数组,约5%的单元均匀分布,非空。我需要: 编辑我需要在numpy/scipy中执行此操作,如果不清楚,很抱歉。此外,还增加了一些要求Numpy 50Kx50K稀疏矩阵,numpy,scipy,sparse-matrix,Numpy,Scipy,Sparse Matrix,我需要持有一个50000x50000稀疏矩阵/2d数组,约5%的单元均匀分布,非空。我需要: 编辑我需要在numpy/scipy中执行此操作,如果不清楚,很抱歉。此外,还增加了一些要求 从数据库中读取5%的非空数据,并尽快将其分配给矩阵/2d阵列单元 使用尽可能少的内存 使用奇特的索引(例如,获取列中所有非空值的索引)。这很好,内存和构建时间同样重要 一旦构建,矩阵将不会改变 然而,我想用它的转置,最好是O(1)内存和时间 实现这一目标最有效的方法是什么? 我可以用nan代替0来表示“空”单元格
不过,这些解决方案的插入速度很慢。这些解决方案将使用整个矩阵约10%的空间。好吧,就我而言,csc似乎是一条可行之路。有了5%的“稀疏因子”,csc中的行索引所占用的内存仍然是值得的。下面是我用来测试我需要的东西是否真的很快的代码:
def build_csc(N, SPARSITY_FACTOR):
data = []
row_indexes = []
column_indexes = [0] * (N+1)
current_index = 0
for j in xrange(N):
column_indexes[j] = current_index
for i in xrange(N):
if random.random() < SPARSITY_FACTOR:
row_indexes.append(i)
data.append(random.random())
current_index += 1
column_indexes[N] = current_index
return sp.csc_matrix((data,row_indexes,column_indexes), shape=(N,N), dtype=np.float)
def take_from_col(m, col_index):
col = m[:,col_index]
indexes = col.nonzero()[0]
values = col[indexes]
def build_csc(N,稀疏系数):
数据=[]
行索引=[]
列索引=[0]*(N+1)
当前指数=0
对于X范围内的j(N):
列索引[j]=当前索引
对于x范围内的i(N):
如果为random.random()<稀疏系数:
行索引追加(i)
data.append(random.random())
当前_指数+=1
列索引[N]=当前索引
返回sp.csc_矩阵((数据,行索引,列索引),shape=(N,N),dtype=np.float)
def从列中取出列(m,列索引):
col=m[:,col_索引]
索引=列非零()[0]
值=列[索引]
在%timeit
中运行这个程序表明它确实很快