gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:50:12 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com