我有一个单元格 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/