【问题标题】:Modifying field values of structure! <Matlab>修改结构的字段值! <Matlab>
【发布时间】:2016-09-29 11:08:11
【问题描述】:

我有 .mat 文件格式,我想修改它以传递给另一个软件。 该文件有 4 个字段的 1x1 结构(名称:数据)。其中之一是一个 1x15 结构(名称:事件),另外还有 4 个字段。我想修改这些字段。 例如,第一个是“时间”,我尝试以不同的方式对其进行修改:

data.event.time=[1:15];

我得到了错误:

"Scalar structure required for this assignment"

也试过了:

data.event = setfield(data.event,'time',1:15);

得到:

 "Scalar structure required for this assignment.

Error in setfield (line 33)
    s.(deblank(strField)) = varargin{end};"

我知道我不了解 Matlab 上的结构机制,所以我的问题可能有点愚蠢,但这是我第二次使用它。

【问题讨论】:

  • 那是什么结构?这里缺少信息。如果你这样做a.b.c=[1:15],它会完美运行,所以正是这种结构阻碍了你这样做。
  • 对不起,“那个结构是什么”是什么意思。我的意思是可能缺少什么信息?

标签: matlab


【解决方案1】:

您可能正在寻找这个:

for t=1:15
    data.event(t).time=t;
end

如果你想将一个向量分配给一个结构的多个元素,循环是最简单的方法。

不幸的是,似乎没有一种很好的方法可以将向量的元素直接分配给结构的元素。

如果您将向量更改为单元阵列,则可能没有循环,但我个人认为这违反直觉。

【讨论】:

    【解决方案2】:

    正如 Dennis Jaheruddin 已经建议的那样,您可以通过转换为元胞数组并使用内置的 deal 函数来避免 for 循环,如下所示:

    timeCell = num2cell(1:15);
    [event.time] = deal(timeCell{:});
    

    need to convert to a cell array,因为您想使用不同的向量元素作为deal 函数的参数。

    【讨论】:

    • 这适用于字符串元胞数组:timeCell = {'A1', 'A2', 'A3'}
    • 其实deal 直接工作,不需要先使用元胞数组。 [event.time] = deal('A1', 'A2', 'A3')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2020-12-31
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多