Matlab:用34个字段查找并替换1*1结构中缺少的值

Matlab:用34个字段查找并替换1*1结构中缺少的值,matlab,struct,nan,Matlab,Struct,Nan,在Matlab中,我有一个包含34个字段的1*1struct。每个字段本身就是一个3d数组。它的照片附在下面。 我想用一个代码在该结构的每个地方查找-9.9692099668386869E+36,并用NaN替换它。 提前感谢您您可以使用以下代码 x = struct2cell(mystruct); for i=1:34 x{i}(x{i} == -9.969209968386869e+36)= nan end mystruct = cell2struct(x, fieldnames(x)

在Matlab中,我有一个包含34个字段的
1*1
struct。每个字段本身就是一个3d数组。它的照片附在下面。 我想用一个代码在该结构的每个地方查找
-9.9692099668386869E+36
,并用
NaN
替换它。

提前感谢您

您可以使用以下代码

x = struct2cell(mystruct);
for i=1:34
   x{i}(x{i} == -9.969209968386869e+36)= nan
end
mystruct = cell2struct(x, fieldnames(x));
您可以使用下面的代码

x = struct2cell(mystruct);
for i=1:34
   x{i}(x{i} == -9.969209968386869e+36)= nan
end
mystruct = cell2struct(x, fieldnames(x));

这可能比单元转换占用的内存更少:

如果您的结构被称为
x

names = fieldnames(x); % gets the names of the items in the struct
for i = 1:numel(names)
    x.(names{i})(x.(names{i})==-9.969209968386869e+36) = nan('single');
end

这可能比单元转换占用的内存更少:

如果您的结构被称为
x

names = fieldnames(x); % gets the names of the items in the struct
for i = 1:numel(names)
    x.(names{i})(x.(names{i})==-9.969209968386869e+36) = nan('single');
end

谢谢,这导致我出现以下错误:
内存不足。为您的选项键入“帮助记忆”你知道如何修复它吗?此代码有效。有关内存管理,请参阅@Behzad您的结构是23GB。您所做的大多数操作都可能会将此容量加倍,例如,此答案将复制这些23GB。我建议你仔细考虑你想如何处理这个数据,因为它太大了,而且它在结构中并同时使用它会导致无数的<代码>内存不足<代码>错误,谢谢,这导致了我以下的错误:<代码>内存不足。为您的选项键入“帮助记忆”你知道如何修复它吗?此代码有效。有关内存管理,请参阅@Behzad您的结构是23GB。您所做的大多数操作都可能会将此容量加倍,例如,此答案将复制这些23GB。我建议您仔细考虑如何处理这个数据,因为它太大,并且在结构中同时使用它,将导致无数的<>代码>内存> <代码> ErrrssError,亲爱的@博士。这个代码导致以下错误:<代码>使用字段名错误,类型为“单元格”的无效输入参数。输入必须是结构或Java或COM对象
@Behzad:
x
应该是您在问题中所讨论的结构。无论变量名是什么,都要更改
x
。亲爱的@Dr.x,此代码导致以下错误:
使用字段名时出错“cell”类型的无效输入参数。输入必须是结构或Java或COM对象
@Behzad:
x
应该是您在问题中所讨论的结构。更改变量名的
x