有没有更好的方法在MATLAB中声明一个空的,类型化的矩阵?

Art*_*ard 5 matlab types matrix

有没有办法在MATLAB中"声明"具有特定用户定义类型的变量?zeros()仅适用于内置数值类型.我提出的唯一解决方案是使用repmat()复制虚拟对象零次:

arr = repmat(myClass(), [1 0])
Run Code Online (Sandbox Code Playgroud)

如果不以这种方式声明变量,任何执行"arr(end + 1)= myClass()"的代码都必须包含默认空矩阵的特殊情况,该矩阵的类型为double.

我错过了一些更明智的事吗?

gno*_*ice 6

根据此文档,所有类都有一个empty方法可以创建该类的空数组.例如:

arr = myClass.empty(0,0);  %# Creates a 0-by-0 array of class myClass
Run Code Online (Sandbox Code Playgroud)

对于内置类型也是如此:

a = uint8.empty(0,1);   %# A 0-by-1 uint8 array
b = single.empty(5,0);  %# A 5-by-0 single array
c = cell.empty(0,0);    %# A 0-by-0 cell array
Run Code Online (Sandbox Code Playgroud)


关于预分配的说明......

您提到过您将通过以下方式在循环中增长此数组:

arr(end+1) = myClass();
Run Code Online (Sandbox Code Playgroud)

如果你知道数组的最终大小是什么,通常更有效的是在循环之外预分配整个数组,然后覆盖或修改循环中的数组元素.我将讨论如何在回答另一个问题时为用户定义的类执行此操作.