MATLAB中结构的多级索引的矢量化

Ame*_*ina 11 matlab

说我在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,没有矢量化,或者是它?

Nzb*_*buu 1

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