我有一个内置的类,想为minus添加运算符重载。 我编写了代码,如果我仅输入一个元素,它就可以正常工作,但是我编写的函数应该可以用于多个元素。

当我尝试输入一个数组, (array of elements)-(one element) ,它应该从arr每个元素中“扣除” def并返回一个新的元素数组。

这是代码:

  function this=minus(obj_arr,filt)
        [lena, lenb]=size(obj_arr);
        if (lena==1)&&(lenb>1)
            obj_arr=obj_arr';
            len=lena;
        elseif (lena>1)&&(lenb==1)
            len=lenb;
        elseif (lena==1)&&(lenb==1)
            len=lena;
        else
            error('at least one dimention must be 1')
        end

        [lenfa,lenfb]=size(filt);
        if (lenfa~=1)||(lenfb~=1)
            error('filter must be 1x1')
        end


        difference=mean(filt.filtered_pf_arr);
        [~,max_val]=max(difference);
        for i=1:len-1

            temp_filt_pf=obj_arr(i).filtered_pf_arr;
            [num_calls,num_fr]=size(temp_filt_pf);
            for ii=1:num_calls
                new_temp_filf_pf=zeros(num_calls,num_fr);
                temp_mean_filt_pf=temp_filt_pf(ii,:);

                max_val_temp=temp_mean_filt_pf(max_val);
                few_def=difference.*max_val_temp;
                new_temp_filf_pf(ii,:)=temp_filt_pf(ii,:)-few_def;
            end
            obj_arr(i).filtered_pf_arr=new_temp_filf_pf;

        end
        this=obj_arr;

当我输入一个命令窗口时有效

arr- an array of elements of the class
elementx- an element of class

elementA-elementB
classname.minus(arr,elementx)
arr(1)-elementx

输入时不起作用

arr-elementx

错误:没有为类“ one_session”找到具有匹配签名的方法“减号”。

#1楼 票数:0

在这之后:

[lena, lenb]=size(obj_arr);
if (lena==1)&&(lenb>1)
    obj_arr=obj_arr';
    len=lena;
elseif (lena>1)&&(lenb==1)
    len=lenb;
elseif (lena==1)&&(lenb==1)
    len=lena;
else
    error('at least one dimention must be 1')
end

len始终为1。接下来,您有一个循环:

for i=1:len-1

那将永远不会运行。 您从数组1:(1-1) == 1:0 = []中获取i 因此,总是跳过循环。

您可能打算让len具有输入向量的长度。 您可以改为使用isvectorlength

if ~isvector(obj_arr)
    error('at least one dimension must be 1')
end
len = length(obj_arr);

请注意, length(obj_arr)max(size(obj_arr)) isvector可以实现为nnz(size(obj_arr)>1)==1 (即,大于1的维数为1),或者假设像您在代码中所做的那样使用2D矩阵,则any(size(obj_arr)==1)

接下来,确保循环遍历了向量的所有元素:

for i=1:len

出于效率考虑,您应该将函数定义为

function obj_arr = minus(obj_arr,filt)

这将使MATLAB能够更好地优化对函数的某些调用,避免就地工作时避免不必要的复制(即arr=arr-1 )。

  ask by gutzcha translate from so

未解决问题?本站智能推荐:

1回复

Matlab:在3数组的元素上循环一个函数与将3数组传递给相同的函数

在Matlab中,我有一个长度为m的数组v ,一个n阶矩阵和一个函数F ,该函数将单个矩阵作为输入并输出一个数字。 从v开始,我想将函数应用于矩阵的整个数组,该矩阵的第i个元素由矩阵M_i组成,其条目是通过将M的所有条目乘以v_i来获得的 。 输出本身就是长度为n的数组。 据我所知,有两
2回复

在MATLAB中重载运算符以模拟哈希数组

是否可以重载subsref和subsasgn以允许非整数类型的索引值? 可以以某种方式破解它吗? 确切的解决方案: containers.Map有一些烦恼,可以通过制作一个继承它的自定义类来解决: 在此类中,可以实现各种类型的键(而不仅仅是一种!)和用于用户操作的便捷方法。 也
2回复

Matlab数据集数组上的重载运算符

根据此响应 ,我开始对数据集执行类似的操作。 在该答案中提到的plus函数,通过将plus.m放在@ cell-folder中,我可以很好地处理单元格数组。 但是,在@ dataset-folder中尝试完全相同(略有不同的实现)时,Matlab对于Dataset+Dataset和plus
3回复

多维数组:运算符重载

我有一个带有多维数组的类: 可以使用此类创建一个,两个,......,n维数组 如果数组有n个维度,我想用n operator[]来获取一个对象: 例: 但数组不是指针的向量,导致其他向量等... 所以我希望operator []返回一个类对象,直到最后一个维度,然后返回
3回复

C++重载数组运算符

我正在创建一个堆,就像这样: 当我尝试从中打印元素时,我喜欢这样: 我的问题是,如果不是访问我想设置它们,如下所示: 我能怎么做? 我不能这样做我做... 谢谢!
5回复

数组的重载运算符

是否可以重载加法运算符(+)来添加数组? 就像是:
1回复

如何正确重载'='运算符以处理重载'[]'运算符的数组?

我必须编写一个IntArray类,它实际上是一个具有一些额外功能的数组(未显示)。 我必须利用运算符重载将元素分配给IntArray对象中的整数数组。 我的程序正确地检索了数组中的元素,但是无法分配数组中的元素。 我认为问题出在此功能之内: 这是我的主要方法: 我也不确定如何从o
1回复

为自己的类/对象重载Addition(+)运算符

我创建了一个类xyz ,它产生一个只包含整数的矩阵。 如果我尝试添加该类的两个实例,我收到错误消息: “未定义的运算符'+'表示'xyz'类型的输入参数。” 我应该做些什么来使内置+运算符与我的类的实例兼容?