在此响应之后,我开始为数据集做类似的事情。
该plus
答案中提到的函数,通过将 plus.m 放在@cell-folder 中,我可以很好地处理单元格数组。然而,在 @dataset-folder 中尝试完全相同(略有不同的实现)时,Matlab 仍然为Dataset+Dataset
和给出“未定义”错误plus(Dataset,Dataset)
。
我怎么了?
编辑 1
在当前目录中,有文件夹 @dataset(与工作 @cell 文件夹相同的位置),其中包含文件 plus.m,其中包含代码:
function C = plus(A,B)
% assuming same size, valid type, etc.
C = zeros(size(A));
for i = 1:size(A,2)
C(:,i) = A.(i) + B.(i);
end
end
在命令提示符下,尝试:
ds = dataset({1,'a'},{2,'b'});
ds+ds
Matlab 报错:
Undefined function 'plus' for input arguments of type 'dataset'.
编辑 2
解决方法总结
简短的版本是丹尼尔斯在下面的回答。可在此处找到替代选项的说明。简而言之,它们提供了以下选项(通常用于重载函数-并非所有解决方案都允许使用标准运算符,例如“+”-此处针对当前问题进行了描述)。它们都不能解决我的问题,但可以用作解决方法。
- 定义一个将所需类作为参数的新函数——ala
dsplus(ds,ds)
- 定义一个新
plus
函数,您可以在其中捕获和处理要为其实现功能的类,并将其他类重新路由到内置函数。 - 丹尼尔斯的建议。
mydataset
创建一个继承自dataset
(classdef mySym < sym
)的新类- 使用组合创建一个新
mydataset
类(即包含内置dataset
作为mydataset
类的属性)
我会添加第 6 个选项:离开 Matlab 并学习 Python。一个在今天看起来越来越有吸引力的选项。