gpt4 book ai didi

matlab - 一次设置多个字段/将新字段添加到单元格结构

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:00 27 4
gpt4 key购买 nike

我有一个 1xn 结构。这些结构包含一些带有数字单元格的字段。并非每个结构都具有相同的字段。所以我想将缺少的字段添加到结构中。但是我没听懂。

%  Mimimal example
% I have same cells, imported from csv by csv2cell()

clear

dataCell{1}={"field_a","field_b","field_c"; ...
1,2,3; ...
4,5,6};

dataCell{2}={"field_a","field_b","field_d"; ...
1,2,4; ...
4,5,8};

% Then I convert them to a struct
for ii=1:numel(dataCell)
DataStruct{ii}=cell2struct((dataCell{ii}(2:end,:)),[dataCell{ii}(1,:)],2);
try fields=[fields, fieldnames(DataStruct{ii})']; % fails for the first loop, because 'fields' doesn't exist yet
catch
fields=[fieldnames(DataStruct{ii})']; % create 'fields' in the first loop
end
end

% Create a list of all existing fields
fields=unique(fields);

% Now look for the missing fields and add them to the struct
for jj=1:numel(DataStruct)
missing_fields{jj} = setdiff(fields,fieldnames(DataStruct{jj}));
for kk=1:numel(missing_fields)
DataStruct{jj}.(missing_fields{jj}{kk})=NaN*zeros(numel(dataCell{jj}(2:end,1)),1); % Execution fails here!
end
end

这会导致错误:

Octave 误差

error: invalid assignment to cs-list outside multiple assignment
error: called from:
error: ~/example.m at line 29, column 44

Matlab 错误

Insufficient outputs from right hand side to satisfy comma separated
list expansion on left hand side. Missing [] are the most likely cause.

问题是,DataStruct{1}.field_a 的输出不是矩阵或单元格,而是多个 ans。是否可以轻松地将单元格转换为矩阵或导入 csv 的更好可能性?

另一种可能是这样的

 DataStruct{jj}=setfields(missing_fields{jj},NaN_Values{jj})

其中 missing_fields{jj}NaN_Values 都是长度相同的单元格,因此我可以一次设置多个字段。

最佳答案

您使用 deal 函数将输出分配给输入。对于您的示例:

% Now look for the missing fields and add them to the struct
for jj=1:numel(DataStruct)
missing_fields{jj} = setdiff(fields,fieldnames(DataStruct{jj}));
for kk=1:numel(missing_fields)
[DataStruct{jj}.(missing_fields{jj}{kk})] = deal(NaN*zeros(numel(dataCell{jj}(2:end,1)),1));
end
end

请注意,您将得到一个Index exceeds matrix dimensions,但这是由于不同的问题 - 我相信您能够解决这个问题!

关于matlab - 一次设置多个字段/将新字段添加到单元格结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14870828/

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