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 结构中查找和替换缺失值的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB如何提取结构体中数据

在 MATLAB 中遍历结构字段名

如何在 MATLAB 中扫描多个结构?

Matlab:查询复杂结构

在哪里定义类型转换到 MATLAB OOP 中的结构?

MATLAB。从结构字段中提取特定数据