MATLAB中是否存在等效于A{:}的函数式实现?
MATLAB直接索引函数返回数组的现存问题
这是MATLAB中的经典问题,此前已有相关讨论,但现有解决方案存在两类明显缺陷:
- 基于
builtin或feval的部分旧方案现已失效; - 部分方案无法适配特定数据类或索引场景。
针对元胞数组A,A{:}与subsref(A,substruct('{}',{':'}))的输出结果并不等价;cell2mat(A)也无法替代A{:}的展开作用,解决不了直接索引的核心问题。
当A是普通变量时,无需借助subsref即可直接索引,但如果A是B{1}或C(1)这类嵌套表达式,MATLAB不允许直接追加{:}进行进一步的展开索引。
正确实现示例
A=arrayfun(@(x) rand(2,2,2),ones(3,1),'Uni',0) cat(4,A{:})
失效方案示例
cat(4,subsref(arrayfun(@(x) rand(2,2,2),ones(3,1),'Uni',0),substruct('{}',{':'})))
上述失效方案仅会对元胞数组的第一个元素生效,无法实现A{:}的全元素展开效果。
内容的提问来源于stack exchange,提问作者M-G-K
相关产品推荐
相关产品推荐

