Ras*_*hid 5 database matlab database-design signal-processing octave
我有一个单元格,Data
它包含三个双数组,
Data =
[74003x253 double] [8061x253 double] [7241x253 double]
Run Code Online (Sandbox Code Playgroud)
我正在使用循环来读取这些数组并执行一些函数,
for ii = 1 : 3
D = Data {ii} ;
m = mean (D') ;
// rest of the code
end
Run Code Online (Sandbox Code Playgroud)
哪个得到警告mean
并说:
考虑为MEAN使用不同的DIMENSION输入参数
但是当我改成它时,
for ii = 1 : 3
D = Data {ii}' ;
m = mean (D) ;
// rest of the code
end
Run Code Online (Sandbox Code Playgroud)
我的内存不足错误.
比较两个代码,有人可以解释会发生什么吗?
似乎我只用复共轭转置得到了错误(我的数据是真正有价值的).
为了获得第n维的平均值,可以mean(D,n)
如已经说明的那样使用.关于内存消耗,我使用windows资源管理器进行了一些测试监控.产量有点预期.
在进行操作时,D=Data{ii}
只消耗最小内存,因为这里matlab只是复制指针.但是,在进行转置时,matlab需要分配更多的内存来存储矩阵D,这意味着内存消耗会增加.
但是,这仅仅不会导致内存溢出,因为转置是在两种情况下完成的.
情况1
单独进来D = Data{ii}';
案例2
在
D = Data {ii}; m = mean(D');
不同之处在于,在案例2中, matlab仅创建一个临时副本,Data{ii}'
而该副本未存储在工作区中.分配的内存在两种情况下都是相同的,但是在存储的情况下 Data{ii}'
是1D
.当内存稍后增加时,这可能导致内存溢出.
内存消耗D
并不是那么糟糕(<200 Mb),但猜测是内存已经很高并且这足以让内存溢出.
警告信息意味着代替,
m = mean (D') ;
Run Code Online (Sandbox Code Playgroud)
你应该做:
m = mean (D,2);
Run Code Online (Sandbox Code Playgroud)
这将采用第二维的平均值,为您留下长度为的列向量size(D,1)
.
我不知道为什么你这样做时只会出现内存不足错误D = Data {ii}'
.也许这是因为当你把它放在一边时mean
(m = mean (D') ;
JIT设法以某种方式进行优化并节省你浪费的内存.
归档时间: |
|
查看次数: |
635 次 |
最近记录: |