【发布时间】:2013-09-24 14:30:29
【问题描述】:
在this response 之后,我开始为数据集做类似的事情。
该答案中提到的plus 函数,通过将plus.m 放在@cell 文件夹中,我可以很好地处理单元格数组。
然而,在 @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
解决方法总结
简短版本是丹尼尔斯在下面的回答。可以在here 找到替代选项的说明。简而言之,它们提供了以下选项(通常用于重载函数 - 并非所有解决方案都允许使用标准运算符,例如“+” - 此处针对当前问题进行了描述)。它们都解决我的问题,但可以用作解决方法。
- 定义一个将所需类作为参数的新函数 -- ala
dsplus(ds,ds) - 定义一个新的
plus函数,您可以在其中捕获和处理要为其实现功能的类,并将其他类重新路由到内置函数。 - 丹尼尔斯的建议。
- 创建一个新的
mydataset类,继承自dataset(classdef mySym < sym) - 使用组合创建一个新的
mydataset类(即将内置的dataset作为mydataset类的属性包含)
我会添加第 6 个选项:离开 Matlab 并学习 Python。一个在今天看起来越来越有吸引力的选项。
【问题讨论】:
-
检查你对 CapiTaLs 的使用...数据集与数据集
-
你能给我们足够的信息来重现这个问题吗?
-
@Nick 上述软件中的
Dataset旨在用作数据集类型的变量名(ala MyDataset)。
标签: matlab oop dataset operator-overloading