说我在MATLAB中有以下内容:
a(1).b.c = 4;
a(2).b.c = 5;
a(3).b.c = 7;
....
Run Code Online (Sandbox Code Playgroud)
我想[4 5 7 ...]
在单个数组中收集值,无需循环并以矢量化方式.
我试过了:
>> a(:).b.c
# Error: Scalar index required for this type of multi-level indexing.
Run Code Online (Sandbox Code Playgroud)
和
>> a.b.c
# Error: Dot name reference on non-scalar structure.
Run Code Online (Sandbox Code Playgroud)
但他们没有工作.我能想到的最好的是:
arrayfun(@(x) x.b.c, a);
Run Code Online (Sandbox Code Playgroud)
但据我所知arrayfun
,没有矢量化,或者是它?
a.b
返回多个输出,因此您不能指望对其调用函数。我能想到的最好的无需使用的单行arrayfun
是:
y = subsref([a.b], substruct('.', c));
Run Code Online (Sandbox Code Playgroud)
请注意,这a.b.c
实际上与:
y = subsref(a.b, substruct('.', c))
Run Code Online (Sandbox Code Playgroud)
这就是为什么它不适用于非标量a
。