问题标签 [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 投票
1 回答
144 浏览

.net - .NET 的稀疏排序数字序列类

我需要非常具体的课程,我真的很想知道是否存在一个,所以我不必重新实现它。我有一套物品。每个项目都有一个与其重量相关的数值。每个项目的重量在集合内是唯一的。物品必须按重量分类。可以为每个项目修改权重,但是更改权重的操作非常昂贵。有一个操作,它经常在集合上执行 - 通过修改项目的重量来移动集合内的项目范围。所以我需要一个 List 类,但有内置的逻辑来管理项目的权重。权重序列必须是稀疏的,以最小化移动操作中的权重冲突,并通过最小化权重更改操作来提高性能。类接口应如下所示:

在框架或 PowerCollections 中没有发现任何类似的东西。我猜你已经知道我打算使用这个类来管理数据库有序记录集操作:) 谢谢。

0 投票
1 回答
1748 浏览

matlab - matlab cell2mat( ... ) 函数与具有一堆稀疏矩阵的单元格数组意外溢出内存

我对使用 Matlab 和 cell2mat() 函数的内存有奇怪的行为......

我想做的是:

但是,唉,由“DOH”指示的行使用了一些荒谬的内存量,超过了将稀疏矩阵的大小加起来应该得到的内存......就像它制作了一个太大的中间结构。

以下工作正常,但双索引不适用于 par-for 所以我只能使用一个核心:

我的怀疑是,在后一种情况下,每个单元元素的大小更易于管理......就像一个 20,000x1 稀疏矩阵,但在前者中,那些“外部”元素现在是 20,000 x 5,000 并且不知何故不适合 Matlab 想要的地方将它们作为临时变量,尽管它们非常稀疏,但内存使用会失控。

关于内存使用和上述内容有什么要遵循的规则吗?或者如何更改我的 parfor 使用,以便在第二种情况下运行?“parfor”是一种新事物,因此网络上关于它的内容比其他核心功能要少……它比运行 8 个 matlab 副本效率更高!

0 投票
3 回答
502 浏览

java - 提高矩阵/表聚合和搜索的性能

有一个产品特征矩阵。它有数千行(产品)和数百个功能。它具有显示产品是否具有此功能的二进制值。所以它可能是一个有 40 000 行和 900 列的表。

Product-feature matrix
pr f1 f2 f3 fn ...
01 0 1 1 1
02 0 0 0 0
03 1 0 1 0
04 1 0 1 0
.....

首先,我必须找到具有给定特征集 QEg Q=(f1=1, f5=1, f27=1) 的产品。简单的说,找蓝车,两厢,3门。

Result 1
Given Q=(f1=1, f5=1, f27=1)
Relevant products: 03, 04, 08...

其次,也是最重要的,我必须找出有多少产品具有一组特征 Q,也有一个特征 f_i(其中 i - 1..n)。换句话说,我们正在选择满足 Q 的行,并计算每列中有多少个 1(进行 SUM 聚合)。比如有多少蓝色车,两厢车,3门也有:柴油机,汽油机,氙气灯。

Result 2
Given Q=(f1=1, f5=1, f27=1)
sum f2 = 943
sum f3 = 543
sum f4 = 7
sum f6 = 432
....

当然,可以使用 RDBMS 解决此任务,但它不是那么有效 - 一般情况下,它需要全扫描才能在每列中查找产品和聚合。至少我不知道如何为这个任务建立一个有效的 b-tree 索引。Oracle 位图索引可能会有所帮助,但我不能使用 Oracle。

目前,我们正在使用 MySQL 来完成这项任务,但效果并不理想。实际上,我们使用整数表示(我们对特征进行分组并将整数存储在列中,而不是布尔值)来减少列的数量。

可以将此矩阵视为稀疏二进制矩阵。而且完全存储在内存中也不是什么大问题。我想知道是否可以应用一些算法来处理稀疏矩阵、向量空间(SVD、矩阵向量乘法等)。但它可能有助于找到满足向量 Q 的产品,而不是聚合。问题更多在于聚合的时间,而不是空间。

可能,可以将矩阵存储为多链表,这将有助于查找产品并为每一列进行聚合。

最后,问题是如何处理这个任务。找到具有给定特征的产品然后计算具有附加特征的产品(按每列汇总)的最有效算法是什么。

0 投票
2 回答
244 浏览

perl - 如何将稀疏矩阵从 Perl 传递到 R?

我有一个非常稀疏的 Perl 矩阵(数组数组),其中undef值等于零。它有 10-1000 行和多达 100k 列。看起来像:

......正如我所说 - 非常稀疏。

我想在 R 脚本中使用这个矩阵(参见一篇文章)。一种方法是从 Perl 将表格打印到文件中 - 每行一行,并0在遇到undef.

但也许有更好、更紧凑的方法来传递这个稀疏矩阵?

0 投票
4 回答
640 浏览

c++ - 有什么有效的方法可以动态改变 boost 中的 compress_matrix 吗?

我正在使用 ublas::Compressed Matrix 与稀疏线性求解器 UMFPACK 一起工作。由于我正在进行模拟,因此每次线性系统的构造都略有不同,这可能涉及放大/缩小系数矩阵和一些稀疏矩阵乘法。线性系统的规模约为 25k。

即使有用于 UMFPACK 的 boost 绑定补丁,我仍然需要不时更改矩阵,有时甚至计算非零值的数量也会很耗时(理想情况下,我必须给出数字初始化矩阵时的非零值)。此外,我使用 ublas::range 动态附加列/行。

所以我的问题是:有没有有效的方法来做到这一点?现在对我来说太慢了。转置一个尺寸为 15k 的矩阵花费近 6 秒,附加大约 12k 行很快(因为我猜它是一个行主矩阵),但将相同数量的列附加到矩阵可能花费高达 20 秒(我猜同样原因如上所述,所以即使我使用了列主矩阵,所需的总时间也是相同的)。

这里有点绝望。欢迎任何建议。

干杯。

0 投票
2 回答
2997 浏览

r - 将系数名称转换为 R 中的公式

当使用具有因子的公式时,拟合模型将系数命名为 XY,其中 X 是因子的名称,Y 是它的特定水平。我希望能够从这些系数的名称中创建一个公式。

原因:如果我将套索拟合到稀疏设计矩阵(如下所示),我想创建一个仅包含非零系数项的新公式对象。

从这里我想有一个公式

我检查了 formula() 和 all.vars() 无济于事。此外,由于可能出现不同类型的术语,编写一个函数来解析它有点痛苦。例如,对于 x:letter 当 x 是一个数值并且 letter 是一个因子时,或者 I(x>5):letter 作为另一个恼人的情况。

那么我不知道有一些函数可以在公式及其字符表示之间进行转换并再次返回吗?

0 投票
6 回答
46292 浏览

python - 遍历 scipy.sparse 向量(或矩阵)

我想知道最好的方法是用 scipy.sparse 迭代稀疏矩阵的非零条目。例如,如果我执行以下操作:

输出是

所以看起来迭代器正在触及每个元素,而不仅仅是非零条目。我看过API

http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.lil_matrix.html

并搜索了一下,但我似乎找不到有效的解决方案。

0 投票
1 回答
1153 浏览

python - 如何在 python hcluster 中使用稀疏矩阵?

我正在尝试在 python 中使用 hcluster 库。我没有足够的 Python 知识在 hcluster 中使用稀疏矩阵。请任何人帮助我。所以,我在做什么:

data.dmp 包含的矩阵如下:

并且只包含矩阵的右上部分。我不知道如何正确拼写英文:) 所以,所有数字都高于主对角线所以 data.dmp 包含: 1 0 1, 0 1 , 0

由于我未知的原因,hcluster 使用反转值,例如如果 A!=C 我使用 0,如果 A == D 使用 1

连锁Y

所以,矩阵 Z 是我需要的(如果我正确使用了 hcluster?)

但我有下一个问题:

  1. 我想对大量输入数据使用稀疏矩阵,因为像现在这样生成输入数据很耗时,我需要从另一种语言将数据导入 python,这就是我需要读取文本文件的原因。请好心,python大师的建议如何制作?

  2. 对于使用 python hcluster 的人,我需要处理大量数据,数百行,可以在 hcluster 中完成吗?这个算法真的能产生正确的HAC吗?

感谢您的阅读,感谢您的帮助!

0 投票
1 回答
4950 浏览

sparse-matrix - 稀疏矩阵及其三元组表示

这个稀疏矩阵和它的三元组表示并没有进入我的脑海......要么它有点棘手,要么我正在学习的资源真的不是那么好......这里是 URI 稀疏矩阵幻灯片

因此,如果您有任何要分享的内容,请继续。

谢谢

0 投票
5 回答
1150 浏览

c++ - 寻找一个 C/C++ 接口,用于在 Linux 中高效计算巨大的稀疏矩阵

我正在寻找一个 C/C++ 接口,用于在 Linux 中高效计算巨大的稀疏矩阵。矩阵可能是数百万乘以百万/千。我检查了一些现有的库,但似乎没有一个能满足我的所有要求,

1、我需要通过动态添加元素来创建一个稀疏矩阵。(不适用于 SparseLib++)

2,我还需要能够创建一个稀疏对角矩阵,以便我可以用不同的标量缩放另一个稀疏矩阵的列。(没有找到一个库,也许还有另一种方法来按列缩放稀疏矩阵)

3、需要支持矩阵乘以矩阵/向量的运算(很多库都支持这些基本运算)

4,它需要支持两个稀疏矩阵或向量之间的逐项乘法或除法,如MATLAB中的.*或./(没有找到这个库,我需要这个操作来筛选出一个稀疏的一些条目矩阵与另一个稀疏矩阵)

5、矩阵求逆或线性求解器。(大多数库都提供线性系统的求解器)

我最初在 Python 中使用 scipy 来实现我的算法。Python消耗太多内存而且速度很慢,这就是为什么我想将我的程序转换为C。

谢谢。