问题标签 [sparse-matrix]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
10492 浏览

python - csv到python中的稀疏矩阵

我有一个大的 csv 文件,其中列出了图中节点之间的连接。例子:

0001,95784
0001,98743
0002,00082
0002,00091

所以这意味着节点 id 0001 连接到节点 95784 和 98743 等等。我需要将其读入 numpy 中的稀疏矩阵。我怎样才能做到这一点?我是 python 新手,所以这方面的教程也会有所帮助。

0 投票
2 回答
335 浏览

math - 将 R 代码片段转换为使用 Matrix 包?

我不确定那里有任何 R 用户,但以防万一:

我是 R 的新手,并被亲切地“传递”了以下 R 代码片段:

当我尝试在我的数据集上运行它时,系统像疯了一样颠簸和交换。现在我意识到这有一个简单的原因:文件 freq-matrix 包含一个大(22GB)矩阵,我试图将它读入内存。

我被告知要使用Matrix包,因为 freq-matrix 到处都有很多很多零,它可以很好地处理这种情况。那会有帮助吗?如果是这样,任何有关如何更改此代码的提示都将受到欢迎。我没有 R 经验,只是开始阅读网站上提供的介绍 PDF。

非常感谢

〜l

0 投票
3 回答
11510 浏览

c++ - 用于稀疏酉矩阵的最佳 C++ 矩阵库

我正在寻找一个好的(最好是积极维护的)C++ 矩阵库。因此它应该被模板化,因为我想使用一个复杂的有理数作为数字类型。我正在处理的矩阵主要是稀疏和单一的。

能否请您推荐一些库,并简要说明为什么要使用它们,因为我知道如何找到它们,但我无法真正决定什么适合我,因为我错过了使用它们的经验。

编辑:

我处理的主要操作是矩阵乘法与向量的标量乘法kronecker 积。矩阵的大小是指数级的,我希望至少能够处理高达 1024x1024 条目的矩阵。

0 投票
4 回答
3420 浏览

java - java稀疏矩阵问题

我有二维矩阵。我的矩阵很稀疏。我正面临性能问题。任何人都可以回答我可以在java中使用什么api或类来处理稀疏矩阵以提高我的程序性能。

例如我想要

0 投票
1 回答
1512 浏览

python - 在 SciPy 中,使用带有稀疏矩阵的 ix_() 似乎不起作用,那么我还能使用什么?

在 Numpy 中,ix_() 用于抓取矩阵的行和列,但它似乎不适用于稀疏矩阵。例如,此代码之所以有效,是因为它使用了密集矩阵:

我使用 ix_() 来索引与第 0 行和第 2 行和列对应的元素,这给出了矩阵的 4 个角。

问题是 ix_ 似乎不适用于稀疏矩阵。继续前面的代码,我尝试以下操作:

并收到一条巨大的错误消息,说明存在此异常:

我已经尝试过使用 SciPy 提供的其他稀疏矩阵格式,但它们似乎都不能与 ix_() 一起使用,尽管它们并不都引发相同的异常。

The example I gave used a matrix that wasn't very big or very sparse, but the ones I am dealing with are quite sparse and potentially very large so it doesn't seem prudent to just list off the elements one by one.

Does anyone know a (hopefully easy) way to do this sort of indexing with sparse matrices in SciPy or is this feature just not built into these sparse matrices?

0 投票
5 回答
3144 浏览

linear-algebra - 通用稀疏迭代求解器库

对于大型稀疏迭代(共轭梯度、MINRES、GMRES 等)线性代数系统求解,有哪些更好的库?我经常编写自己的例程,但我很想知道人们喜欢哪些“现成的”包。我听说过 PETSc、TAUCS、IML++ 和其他一些。我想知道这些是如何堆积起来的,还有什么。我的偏好是易于使用和免费提供的软件。

0 投票
4 回答
1491 浏览

c++ - 帮助显示两个矩阵的总和(使用链表)

嘿,我在这个程序中显示我的结果时遇到问题,但程序可以编译。关于出了什么问题的任何想法?该程序的目的是获取两个 2 × 2 矩阵并将它们相加以创建称为结果的矩阵。但是在显示每个矩阵(A、B 和结果)中的值时,它会挂起。为什么在 search(A,0,0) 调用?

-谢谢

0 投票
1 回答
531 浏览

python - 求解一些已知边界值的稀疏线性问题

我正在尝试求解矩形域上的泊松方程,该方程最终成为像 Ax=b 这样的线性问题,但由于我知道边界条件,因此存在我具有解值的节点。我想我的问题是......如果我知道 x 的某些坐标是什么并且未确定的值也取决于这些坐标,我该如何解决稀疏系统 Ax=b?除了我知道一些解决方案之外,它与普通解决方案相同。

谢谢!

0 投票
2 回答
1165 浏览

algorithm - 高效求解稀疏矩阵

为了解决备用矩阵,

一般来说,矩阵必须有多大(根据经验)

对于像 congraduate 下降这样的方法比蛮力求解器(不利用稀疏性)更快?

0 投票
7 回答
3092 浏览

c++ - 如何加快我的稀疏矩阵求解器?

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

所有涉及的数组都是float类型。实际上,它们不是数组,而是具有重载[]运算符的对象,(我认为)应该对其进行优化,但定义如下:

对于d_nx = d_ny = 128,这可以在 Intel i7 920 上每秒运行大约 3500 次。这意味着内部循环体每秒运行 3500 * 128 * 128 = 5700 万次。由于只涉及一些简单的算术,这让我觉得对于 2.66 GHz 处理器来说这是一个低数字。

也许它不受 CPU 能力的限制,而是受内存带宽的限制?好吧,一个 128 * 128float阵列占用 65 kB,因此所有 6 个阵列应该很容易放入 CPU 的 L3 高速缓存(即 8 MB)。假设没有缓存在寄存器中,我在内部循环体中计算了 15 次内存访问。在 64 位系统上,这是每次迭代 120 字节,因此 5700 万 * 120 字节 = 6.8 GB/s。L3 高速缓存以 2.66 GHz 运行,因此处于同一数量级。我的猜测是内存确实是瓶颈。

为了加快速度,我尝试了以下方法:

  • 用 编译g++ -O3。(嗯,我从一开始就这样做了。)

  • 使用 OpenMP pragma 并行化超过 4 个内核。我必须更改为 Jacobi 算法以避免读取和写入同一个数组。这需要我进行两倍的迭代,从而得到大致相同速度的最终结果。

  • 摆弄循环体的实现细节,例如使用指针而不是索引。没有效果。

加速这个家伙的最佳方法是什么?在汇编中重写内部主体是否有帮助(我必须先学习)?我应该在 GPU 上运行它吗(我知道该怎么做,但这太麻烦了)?还有什么好主意吗?

(注意,我确实接受“不”作为答案,例如:“它不能更快​​地完成,因为......”)

更新:根据要求,这是一个完整的程序:

我编译并运行它如下:

(它每秒进行 8000 次而不是 3500 次迭代,因为我的“真实”程序也做了很多其他的事情。但它具有代表性。)

更新 2:有人告诉我,未初始化的值可能不具有代表性,因为 NaN 和 Inf 值可能会减慢速度。现在清除示例代码中的内存。不过,执行速度对我来说并没有什么不同。