Matlab:在具有 34 个字段的 1*1 结构中查找和替换缺失值
Posted
技术标签:
【中文标题】Matlab:在具有 34 个字段的 1*1 结构中查找和替换缺失值【英文标题】:Matlab: find and replace missing value in a 1*1 struct with 34 fields 【发布时间】:2020-02-23 08:22:59 【问题描述】:在 Matlab 中,我有一个具有 34 个字段的 1*1
结构。每个字段本身都是一个 3d 数组。下面附上一张它的照片。
我希望有一个代码可以在 此结构的任何地方 中找到 -9.969209968386869e+36
并将其替换为 NaN
。
here is a picture of it
提前谢谢你
【问题讨论】:
【参考方案1】:这可能比单元格转换占用更少的内存:
如果你的结构叫做x
,
names = fieldnames(x); % gets the names of the items in the struct
for i = 1:numel(names)
x.(namesi)(x.(namesi)==-9.969209968386869e+36) = nan('single');
end
【讨论】:
亲爱的@Dr. X 此代码导致以下错误:Error using fieldnames Invalid input argument of type 'cell'. Input must be a structure or a Java or COM object.
@Behzad: x
应该是您在问题中谈论的结构。将 x
更改为您的变量名称。【参考方案2】:
你可以使用下面的代码
x = struct2cell(mystruct);
for i=1:34
xi(xi == -9.969209968386869e+36)= nan
end
mystruct = cell2struct(x, fieldnames(x));
【讨论】:
谢谢,这导致我出现以下错误:Out of memory. Type "help memory" for your options.
你知道如何解决吗?
此代码有效。内存管理请看mathworks.com/help/matlab/matlab_prog/…
@Behzad 你的结构是 23GB。您所做的大多数操作很可能会使这个数量翻倍,例如这个答案将复制那些 23GB。我建议你仔细考虑你想如何处理这些数据,因为它太大了,把它放在结构中并同时操作所有这些会导致无数的out of memory
错误以上是关于Matlab:在具有 34 个字段的 1*1 结构中查找和替换缺失值的主要内容,如果未能解决你的问题,请参考以下文章