database - 仅通过矩阵转置内存不足

标签 database matlab database-design signal-processing octave

我有一个单元格 Data,它包含三个 double 数组,

 Data = 

[74003x253 double]    [8061x253 double]    [7241x253 double]

我正在使用一个循环来读取这些数组并执行一些功能,

for ii = 1 : 3
    D = Data {ii} ;
    m = mean (D') ;
    // rest of the code
end

它得到一个关于 mean 的警告并说:

考虑对 MEAN 使用不同的 DIMENSION 输入参数

但是当我把它改成

for ii = 1 : 3
    D = Data {ii}' ;
    m = mean (D) ;
    // rest of the code
end

我收到内存不足错误

比较两个代码,谁能解释一下会发生什么?

看来我只在使用复数共轭转置时出错(我的数据是实数)。

最佳答案

如前所述,要获取第 n 个维度的平均值,可以使用 mean(D,n)。关于内存消耗,我用windows资源管理器做了一些测试监控。输出符合预期。

在执行操作 D=Data{ii} 时,只消耗最少的内存,因为这里 matlab 只是复制一个指针。但是,在进行转置时,matlab需要分配更多的内存来存储矩阵D,这意味着内存消耗增加。

然而,这并不会导致内存溢出,因为在这两种情况下都进行了转置。

案例一

分别在D = Data{ii}';

案例二

D = 数据 {ii}; m = mean(D');

不同之处在于,在情况 2 中,matlab 仅创建 Data{ii}' 的临时副本,该副本未存储在工作区中。两种情况下分配的内存是相同的,但在情况 1 中,Data{ii}' 存储在 D 中。当内存稍后增加时,这可能会导致内存溢出。

D 的内存消耗并没有那么糟糕(< 200 Mb),但猜测内存已经变高了,这足以导致内存溢出。

关于database - 仅通过矩阵转置内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26453472/

相关文章:

database - 何时在列中使用 Null 与 N/A?

database - 为什么有人需要内存数据库?

android - 如何获取多列主键的唯一 _id 列?

python - 如何在 MATLAB 中使用 python 字典对象?

sql - 检查约束使用情况

c# - EF : Database design issues regarding cross database relations

mongodb - 我怎样才能处理一个非常大的数据库而不错过性能?

database - ETL 工具和构建工具

matlab - 没有得到 HOG 的 'spatial weights' 是什么

class - 如何在 MATLAB 中定义一个类,该类使用在单独的文件(@ 文件夹中)中定义的方法?