arrays - 数组中每个类实例的调用方法(Matlab)

标签 arrays oop matlab object multidimensional-array

我是 Matlab 的新手,有人告诉我,在数组上执行相同的操作时,使用点运算符而不是 for 循环会更快。

例子:

A = 1:200
A = A .* 10;

代替:

A = 1:200
for i = 1:200
    A(i) = A(i) * 10;
end

我创建了一个对象的多维数组(这些对象是我创建的类的实例)。是否可以在不使用 for 循环的情况下在所有实例上使用相同的参数调用相同的方法?

这3种方法我都试过了,但是都不行(A是三维数组):

A(:,:,:).methodName(argument1, argument2);
A.methodName(argument1, argument2);
A..methodName(argument1, argument2);

最佳答案

您应该能够使用“功能形式”调用您的方法

methodName(A, argument1, argument2)

但是,'methodName' 将需要处理您已传递对象数组的事实。这是一个简单的例子

classdef Eg
    properties
        X
    end
    methods
        function obj = Eg( arg )
            if nargin == 0
                % Default-constructor required
                arg = [];
            end
            obj.X = arg;
        end
        function x = maxX( objs )
        % collect all 'X' values:
            xVals = [objs.X];
            % return the max
            x = max( xVals(:) );
        end
    end
    methods ( Static )
        function testCase()
        % Just a simple test case to show how this is intended to work.
            for ii = 10:-1:1
                myObjArray(ii) = Eg(ii);
            end
            disp( maxX( myObjArray ) );
        end
    end
end

如果可能,最好(在 MATLAB 中)用更少的对象存储更大的数组,而不是用很多小对象。

关于arrays - 数组中每个类实例的调用方法(Matlab),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7946448/

相关文章:

java - 如何使用私有(private)构造函数从类创建对象?

matlab - 如何将元胞数组应用于带有目录的 Matlab exist()?

arrays - 如何使用 AutoIt 循环 json 数组

c - 将用户输入的字符分配给变量

oop - 构建面向对象的编译器

java - 当用户传入其他类时,如何允许一个类构造其他类?

database - MATLAB 数据库工具箱的开源替代品

matlab - 我对随机梯度下降的实现是否正确?

javascript - Node.js puppeteer - 在循环中使用数组中的值来循环浏览页面

php - 合并帖子值并删除空值