序言:
我的框架是Matlab。我有一个非常大的数据矩阵 M (size(M) = 30 20 30 20 51 300 ),我需要操纵这个矩阵(计算一些相关性,平均,循环移动,插值等等)。
!重要!:这个矩阵的大部分元素都是零或一!
我的问题:由于使用如此庞大的矩阵非常耗时,是否可以执行相同的操作,但是在这个矩阵的稀疏形式上?当然,不应丢失任何关于零或一的信息(例如,用于计算不同元素之间的平均值或相关性)。
有没有其他方法来处理这样的矩阵?(巨大的,主要是 0 和 1)
提前致谢!
序言:
我的框架是Matlab。我有一个非常大的数据矩阵 M (size(M) = 30 20 30 20 51 300 ),我需要操纵这个矩阵(计算一些相关性,平均,循环移动,插值等等)。
!重要!:这个矩阵的大部分元素都是零或一!
我的问题:由于使用如此庞大的矩阵非常耗时,是否可以执行相同的操作,但是在这个矩阵的稀疏形式上?当然,不应丢失任何关于零或一的信息(例如,用于计算不同元素之间的平均值或相关性)。
有没有其他方法来处理这样的矩阵?(巨大的,主要是 0 和 1)
提前致谢!
您可以使用稀疏矩阵。
稀疏矩阵的唯一问题是,它们只有二维,所以表示矩阵的直接方法是将它包装成一个稀疏矩阵,大小[N 1]
在N = prod([ 30 20 30 20 51 300])
你的情况下。我已经为 N 维直方图(听起来与您的应用程序相似)完成了此操作,并且效果很好。
但是,您将失去使用所有智能索引的可能性。因此,在单个维度上使用均值/总和等会变得更加复杂,因为您必须将下标索引转换为线性索引,反之亦然。
为此,您应该查看sub2ind
and ind2sub
。(听起来像是一个有趣的项目,将内置稀疏矩阵包装成一个 n 维稀疏矩阵......)