查看单个帖子
旧 2019-12-10, 20:30   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 有没有更好的方法在MATLAB中声明一个空的类型化矩阵?

有没有一种方法可以在MATLAB中“声明”具有特定用户定义类型的变量? zeros()仅适用于内置数字类型。我想出的唯一解决方案涉及使用repmat()将虚拟对象复制零次:

arr = repmat(myClass(), [1 0]) 在不以这种方式声明变量的情况下,任何执行“ arr(end + 1)= myClass()”的代码都必须为类型为double的默认空矩阵包括特殊情况。

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



回答:

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

arr = myClass.empty(0,0); %# Creates a 0-by-0 array of class myClass 对于内置类型也是如此:

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


有关预分配的说明...

您提到过,您将通过以下方式循环增加此数组:

arr(end+1) = myClass(); 如果知道数组的最终大小,通常在循环外预先分配整个数组 ,然后覆盖或修改循环中的数组元素通常会更有效率。我将在另一个问题的答案中讨论如何对用户定义的类执行此操作。



更多&回答...
poster 当前离线   回复时引用此帖