【发布时间】:2016-01-12 18:26:00
【问题描述】:
我有一个源矩阵和目标矩阵,我正在使用稀疏函数创建一个邻接矩阵。
W = sparse(w1(:,1),w1(:,2),1,n,n);
我的 n 大约等于 540,000(这是我拥有的数据的一个子集)。创建矩阵本身在计算上非常容易。但是,我需要获得所述矩阵的特征值。更准确地说
rho = max(abs(eigs(W)));
一行代码需要很长时间。稍微研究一下,我被引导相信获得稀疏矩阵的特征值在计算上是昂贵的。我不能使用完整的命令,比如 uint8(full(W)),因为我最终超出了最大矩阵大小/内存容量(130GB 内存)。但是,如果格式为 uint8,我将能够创建所述完整的邻接矩阵。
感谢任何帮助。我认为我需要的是以下之一
- 将邻接矩阵直接构造为完整 uint8 的另一种方法;
- 一种将我创建的邻接矩阵转换为完整 uint8 的方法;或
- 计算这些特征值的另一种方法
【问题讨论】:
-
在写我的答案时,我假设 w1 是未排序的并且很大以便快速排序。如果这不是真的,可以逐列构建矩阵,这比我写的答案需要更少的内存。
-
大小为 n*n 的
uint8矩阵不适合您的记忆。它需要540000.^2/1024^3GB 内存,即 271GB。对于这么大的矩阵,使用sparse可能是最好的选择。 -
如果我错了请纠正我,但我刚刚意识到
eig和eigs函数只能在双类型矩阵中运行。看来我没有其他方法可以在 matlab 上计算这些特征值。 -
文档中没有说明,但是 double 可能是两个函数都支持的唯一类。
eig也可用于sym
标签: matlab sparse-matrix adjacency-matrix eigenvalue