在Matlab中使用大矩阵

在Matlab中使用大矩阵,matlab,matrix,sparse-matrix,Matlab,Matrix,Sparse Matrix,序言: 我的框架是Matlab。我有一个非常大的数据矩阵M(大小(M)=302051300),我需要处理这个矩阵(计算一些相关性,平均值,循环移位,插值等等) !重要!:该矩阵的大多数元素是零或一 我的问题:由于使用如此庞大的矩阵非常耗时,是否可以在该矩阵的稀疏形式上执行相同的操作?当然,我们不应该丢失任何关于0或1的信息(例如,用于计算不同元素之间的平均值或相关性) 有没有其他方法来处理这样的矩阵?(巨大,大部分为0和1) 提前谢谢 您可以使用稀疏矩阵 稀疏矩阵的唯一问题是,它们只有两个维度,

序言

我的框架是Matlab。我有一个非常大的数据矩阵M(大小(M)=302051300),我需要处理这个矩阵(计算一些相关性,平均值,循环移位,插值等等)

!重要!:该矩阵的大多数元素是

我的问题:由于使用如此庞大的矩阵非常耗时,是否可以在该矩阵的稀疏形式上执行相同的操作?当然,我们不应该丢失任何关于0或1的信息(例如,用于计算不同元素之间的平均值或相关性)

有没有其他方法来处理这样的矩阵?(巨大,大部分为0和1)


提前谢谢

您可以使用稀疏矩阵

稀疏矩阵的唯一问题是,它们只有两个维度,因此表示矩阵的直接方法是将其包装成一个大小为
[n1]
的稀疏矩阵,其中
N=prod([302051300])
。 我已经对N维直方图(听起来和你的应用程序很相似)做了这项工作,效果很好

但是,您将失去使用所有智能索引的可能性。 因此,在一维上使用均值/和等将变得更加复杂,因为您必须将下标索引转换为线性索引,反之亦然

为此,您应该看看
sub2ind
ind2sub

(听起来像是一个有趣的项目,将内置稀疏矩阵包装成n维稀疏矩阵…

您可以使用稀疏矩阵

稀疏矩阵的唯一问题是,它们只有两个维度,因此表示矩阵的直接方法是将其包装成一个大小为
[n1]
的稀疏矩阵,其中
N=prod([302051300])
。 我已经对N维直方图(听起来和你的应用程序很相似)做了这项工作,效果很好

但是,您将失去使用所有智能索引的可能性。 因此,在一维上使用均值/和等将变得更加复杂,因为您必须将下标索引转换为线性索引,反之亦然

为此,您应该看看
sub2ind
ind2sub

(听起来像是一个有趣的项目,将内置稀疏矩阵包装成一个n维稀疏矩阵…

你看过
sparse
函数吗?只需按照示例进行操作……如何将其分片处理,例如沿最后一个维度处理?大小为302051的矩阵只需要大约150MB。您需要执行哪些操作?你能使用矩阵的
uint8
(或
logical
)版本吗?@LuisMendo即使使用uint8,完整矩阵也需要5.5G的容量-如果我没有弄错的话。你看过
稀疏的
函数吗?只需按照示例进行操作……如何将其分片处理,例如沿最后一个维度处理?大小为302051的矩阵只需要大约150MB。您需要执行哪些操作?你能使用矩阵的
uint8
(或
logical
)版本吗?@LuisMendo即使使用uint8,整个矩阵也需要5.5G的容量-如果我没有弄错的话。