MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   有没有更好的方法在MATLAB中声明一个空的类型化矩阵? (https://www.labfans.com/bbs/showthread.php?t=23280)

poster 2019-12-10 20:30

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

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

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



[B]回答:[/B]

根据[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_oop/brd4btr.html#brd4nrh"]本文档[/URL] ,所有类都有一个empty方法,该方法创建该类的空数组。例如:

arr = myClass.empty(0,0); %# Creates a 0-by-0 array of class myClass 对于[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f2-43934.html"]内置类型[/URL]也是如此:

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


[B]有关预分配的说明... [/B]

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

arr(end+1) = myClass(); 如果知道数组的最终大小,通常在循环外[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f8-784135.html#f8-793781"]预先分配整个数组[/URL] ,然后覆盖或修改循环中的数组元素通常会更有效率。我将在[URL="https://stackoverflow.com/questions/2510427/how-to-preallocate-an-array-of-class-in-matlab/2510523#2510523"]另一个问题的答案中[/URL]讨论如何对用户定义的类执行此操作。



[url=https://stackoverflow.com/questions/2594353]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 05:05

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.