标签: sparse-matrix

如何加速我的稀疏矩阵求解器?

我正在使用Gauss-Seidel方法编写稀疏矩阵求解器.通过剖析,我已经确定我的程序的大约一半时间花在解算器中.性能关键部分如下:

size_t ic = d_ny + 1, iw = d_ny, ie = d_ny + 2, is = 1, in = 2 * d_ny + 1;
for (size_t y = 1; y < d_ny - 1; ++y) {
    for (size_t x = 1; x < d_nx - 1; ++x) {
        d_x[ic] = d_b[ic]
                - d_w[ic] * d_x[iw] - d_e[ic] * d_x[ie]
                - d_s[ic] * d_x[is] - d_n[ic] * d_x[in];
        ++ic; ++iw; ++ie; ++is; ++in;
    }
    ic += 2; iw += 2; …
Run Code Online (Sandbox Code Playgroud)

c++ optimization performance sparse-matrix

17
推荐指数
2
解决办法
2933
查看次数

如何有效地存储具有高冗余值的矩阵

我有一个非常大的矩阵(100M行乘100M列),它有很多重复的值,彼此相邻.例如:

8 8 8 8 8 8 8 8 8 8 8 8 8
8 4 8 8 1 1 1 1 1 8 8 8 8
8 4 8 8 1 1 1 1 1 8 8 8 8
8 4 8 8 1 1 1 1 1 8 8 8 8
8 4 8 8 1 1 1 1 1 8 8 8 8
8 4 8 8 1 1 1 1 1 8 8 8 8
8 …
Run Code Online (Sandbox Code Playgroud)

algorithm sparse-matrix matrix-multiplication data-structures

17
推荐指数
2
解决办法
3190
查看次数

在非常大的稀疏矩阵上应用PCA

我正在使用R进行文本分类任务,并且我获得了一个文档项矩阵,其大小为22490×120,000(仅有400万个非零条目,小于1%的条目).现在我想通过利用PCA(主成分分析)来降低维数.遗憾的是,R无法处理这个巨大的矩阵,所以我将这个稀疏矩阵存储在"矩阵市场格式"的文件中,希望使用其他一些技术来做PCA.

所以任何人都可以给我一些有用库(无论编程语言)的提示,它可以轻松地用这个大规模矩阵做PCA,或者自己做一个简单的PCA,换句话说,首先计算协方差矩阵,然后计算协方差矩阵的特征值和特征向量.

我想要的是计算所有PC(120,000),并且只选择前N台PC,它们占90%的差异.显然,在这种情况下,我必须先给出一个阈值,将一些非常小的方差值设置为0(在协方差矩阵中),否则,协方差矩阵将不会稀疏,其大小将是120,000乘120,000,这是用一台机器无法处理.此外,负载(特征向量)将非常大,并且应以稀疏格式存储.

非常感谢您的帮助!

注意:我使用的是具有24GB RAM和8个CPU内核的机器.

language-agnostic machine-learning sparse-matrix pca

17
推荐指数
2
解决办法
8711
查看次数

内存有效创建稀疏矩阵

我有一个50000字符串向量的列表,包含6000个独特字符串的各种组合.

目标:我想在"相对频率"(table(x)/length(x))中对它们进行转换,并将它们存储在稀疏矩阵中.低内存消耗比速度更重要.目前记忆是瓶颈.(即使源数据大约有~50 mb,目标格式的数据~10mb - >转换似乎效率低下,......)

生成样本数据

dims <- c(50000, 6000)
nms <- paste0("A", 1:dims[2])
lengths <- sample(5:30, dims[1], replace = T)
data <- lapply(lengths, sample, x = nms, replace = T)
Run Code Online (Sandbox Code Playgroud)

可能的尝试:

1)sapply()简化为稀疏矩阵?

library(Matrix)  
sparseRow <- function(stringVec){
  relFreq <- c(table(factor(stringVec, levels = nms)) / length(stringVec))
  Matrix(relFreq, 1, dims[2], sparse = TRUE)
}
sparseRows <- sapply(data[1:5], sparseRow)
sparseMat <- do.call(rbind, sparseRows)
Run Code Online (Sandbox Code Playgroud)

问题:我的瓶颈似乎是sparseRows因为行没有直接组合成稀疏矩阵.(如果我在完整样本上运行上面的代码,我得到一个Error: cannot allocate vector of size 194 Kb Error during wrapup: memory exhausted (limit …

memory r sparse-matrix

17
推荐指数
2
解决办法
532
查看次数

scipy csr_matrix:了解indptr

每过一段时间,我去操纵csr_matrix,但我总是忘了怎样的参数indices,并indptr共同构建一个稀疏矩阵.

我正在寻找一个清晰直观的解释,说明在使用符号定义稀疏矩阵时如何与参数和参数进行indptr交互.dataindicescsr_matrix((data, indices, indptr), [shape=(M, N)])

我可以从scipy文档中看到该data参数包含所有非零数据,并且该indices参数包含与该数据相关联的列(因此,在文档中给出的示例中indices等于col).但是我们怎么能用清晰的语言解释indptr参数呢?

python scipy sparse-matrix

17
推荐指数
1
解决办法
3267
查看次数

另一个生命游戏问题(无限网格)?

我一直在玩康威的生命游戏,最近发现了一些非常快速的实现,如Hashlife和Golly.(在这里下载Golly - http://golly.sourceforge.net/)

我无法理解的一件事是编码器如何实现无限网格?我们无法保持无限的任何东西,如果你跑得很好并且让几个滑翔机飞过边缘,等待几分钟然后向外缩放,你会看到滑翔机仍在那里空间逃跑,所以在神的名字中如何以编程方式处理这个无限的概念?是否存在记录良好的模式或什么?

非常感谢

algorithm cellular-automata sparse-matrix data-structures conways-game-of-life

16
推荐指数
2
解决办法
7345
查看次数

scipy.sparse矩阵的元素功效

如何scipy.sparse根据元素将矩阵提升为幂?numpy.power根据其手册,应该这样做,但它在稀疏矩阵上失败:

>>> X
<1353x32100 sparse matrix of type '<type 'numpy.float64'>'
        with 144875 stored elements in Compressed Sparse Row format>

>>> np.power(X, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ".../scipy/sparse/base.py", line 347, in __pow__
    raise TypeError('matrix is not square')
TypeError: matrix is not square
Run Code Online (Sandbox Code Playgroud)

同样的问题X**2.转换为密集阵列有效,但浪费了宝贵的秒数.

我有同样的问题np.multiply,我用稀疏矩阵的multiply方法解决了,但似乎没有pow方法.

python numpy exponentiation scipy sparse-matrix

16
推荐指数
2
解决办法
4870
查看次数

稀疏数据/数据存储区/数据库是什么意思?

最近一直在阅读Hadoop和HBase,并且遇到了这个术语 -

HBase是一个开源,分布式,稀疏,面向列的存储......

稀疏是什么意思?它与稀疏矩阵有关吗?我猜它是可以有效存储的数据类型的属性,因此,想要了解更多.

database hadoop hbase sparse-matrix database-schema

16
推荐指数
2
解决办法
3万
查看次数

什么是跨步阵列?

还有一个称为密​​度阵列的对应物.这是什么意思?我做了一些搜索,但没有得到准确的信息.

arrays sparse-matrix data-structures

16
推荐指数
6
解决办法
8582
查看次数

有效地乘以Numpy/Scipy稀疏矩阵和密集矩阵

我正在努力实现以下等式:

X =(Y.T * Y + Y.T * C * Y) ^ -1
Run Code Online (Sandbox Code Playgroud)

Y是(nxf)矩阵,C是(nxn)对角线; n约为300k,f在100到200之间变化.作为优化过程的一部分,这个等式将使用近1亿次,因此必须非常快速地处理.

Y是随机初始化的,C是一个非常稀疏的矩阵,对角线上300k中只有少数数字与0不同.由于Numpy的对角线函数创建了密集矩阵,我创建了C作为稀疏csr矩阵.但是当试图解决方程式的第一部分时:

r = dot(C, Y)
Run Code Online (Sandbox Code Playgroud)

由于内存限制,计算机崩溃.我决定然后尝试将Y转换为csr_matrix并进行相同的操作:

r = dot(C, Ysparse)
Run Code Online (Sandbox Code Playgroud)

这种方法耗时1.38毫秒.但是这个解决方案有点"棘手",因为我使用稀疏矩阵来存储密集的矩阵,我想知道它真的有多高效.

所以我的问题是,是否有一些方法可以将稀疏的C和密集的Y相乘,而不必将Y变为稀疏并提高性能?如果不知何故C可以表示为对角线密集而不消耗大量内存,这可能会导致非常有效的性能,但我不知道这是否可行.

我感谢您的帮助!

python performance numpy scipy sparse-matrix

16
推荐指数
2
解决办法
2万
查看次数