【发布时间】:2019-02-01 00:30:50
【问题描述】:
增加一个数组,例如在循环中通过x = [x, a],在Matlab编程中通常不被接受,因为它会导致一个或多个调整大小操作,因此预分配通常是更好的选择。但是,在某些情况下,例如作为parfor 块中的reduction assignment,它可能具有优势。为此,必须将数组创建为零大小。对于数值数组,其表达式为[],对于元胞数组{}。
对于结构数组,它不是那么明确。例如初始化为struct() 不会创建一个大小为零的结构数组,而是一个没有字段的 1x1 结构数组。这会导致错误
使用 horzcat 时出错
连接的结构体数组中的字段数不匹配。
结构体数组的串联要求这些数组具有相同的字段集。
在增长过程中,因为附加结构的字段结构与“无字段”结构不兼容。
如何初始化一个零大小的结构体数组以进行增长?
【问题讨论】:
-
这个问题我遇到过很多次,现在终于弄明白了,所以想分享一下解决方案。
-
你可以使用
s = struct('field1', {}, 'field2', {})创建一个包含指定字段的0×0结构数组 -
另外,
x=x[x,a]效率极低。使用x(end+1)=a。 stackoverflow.com/a/48990695/7328782 -
@A.Donda 在这种情况下,
struct([])创建一个没有字段的 0×0 结构数组 -
@LuisMendo,谢谢!我将您的 cmets 纳入答案。