我需要一个50,000×50,000稀疏矩阵/2d阵列,其中约5%的单元,均匀分布,非空的。我需要:
编辑--我需要在numpy/scipy中这样做,如果不清楚的话,很抱歉。此外,增加了要求。
实现这一目标的最有效方法是什么?我能保持nan的值而不是零来表示“空”单元格吗?(0是我的有效值),我能有效地运行纳米值吗?如果没有,我能否有效地获取给定列/行中所有非零的索引和值?
发布于 2012-12-07 16:35:33
好吧,就我的目的来说,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]在%timeit中运行它表明这确实是快速的。
发布于 2012-12-07 12:14:47
matrix很好地总结了几种不同的方法。如果您从网站中检索的数据是无序的,我会推荐“列表列表”(或者在本例中更有效--可能是列/值对列表的数组)。如果你能保证订购,我会推荐‘耶鲁格式’。这两种解决方案都使得存储NAN变得不必要,并且使纳米/纳米平均速度更快。
然而,这些解决方案提供了缓慢的插入。这些解将占用整个矩阵约10%的空间。
https://stackoverflow.com/questions/13762585
复制相似问题