在Matlab中设置向量的初始类型

din*_*aur 7 oop matlab

我想声明一个接受用户定义类型插入的空向量.在下面的示例中node是我定义的类型classdef node ...

以下代码被Matlab解释器拒绝,因为空向量自动初始化为double类型,因此无法node插入其中.

>> a = [];
>> a(1) = node(1,1,1);
The following error occurred converting from node to double:
Conversion to double from node is not possible.
Run Code Online (Sandbox Code Playgroud)

接受下面的代码是因为向量初始化为nodein,因此以后可以插入节点.

>> a = [node(1,1,1)];
>> a(1) = node(1,2,1);
Run Code Online (Sandbox Code Playgroud)

但是,我想创建一个可以在其中插入节点的向量.我可以这样做尴尬:

>> a = [node(1,1,1)];
>> a(1) = [];
Run Code Online (Sandbox Code Playgroud)

什么是更好的方式?我正在寻找一些声明空矢量的初始类型的东西node.如果我可以编写语法,它看起来像:

>> a = node[];
Run Code Online (Sandbox Code Playgroud)

但那不是有效的Matlab语法.有没有办法做到这一点?

mar*_*sei 8

可以创建空对象

A = MyClass.empty;
Run Code Online (Sandbox Code Playgroud)

它与你自己的类,但也与Matlab的类

A = int16.empty;
Run Code Online (Sandbox Code Playgroud)

此方法能够使用此语法创建多维空对象

A = MyClass.empty(n,m,0,p,q);
Run Code Online (Sandbox Code Playgroud)

只要一个维度设置为零.

文档.


mik*_*ola 3

您没有指定类包含的内容,但是,一般来说,也可以将数组创建函数(例如zerosones和其他函数)用于用户定义的类。

对于内置类,您可能会进行如下调用

A = zeros(2,3,'uint8');

创建数据类型 的 2×3 零矩阵uint8。类似的语法也可以应用于适当类型的用户定义类,例如:

A = zeros(2,3,'MyClass');

其中'MyClass'是您的班级名称,或者举个例子:

p = MyClass(...);
A = zeros(2,3,'like',p);
Run Code Online (Sandbox Code Playgroud)

可以在此处找到此信息的来源以及如何在用户定义的类中实现对数组创建函数的支持的规范。

这样的调用zeros(0,0,'MyClass')将产生一个类型为 的空向量MyClass