使用'冒号'对象阵列进行矢量操作索引[MATLAB]

时间:2016-01-31 19:29:48

标签: matlab class object vector indexing

在我的Matlab代码中,我有一个' mass'的对象数组。这是一个描述质量,速度,加速等的类的对象。

为了加快模拟速度,我希望通过使用更多的向量运算来减少for循环的使用。其中一项操作是获取当前质量与其他质量的距离。

我想解决这个问题:

%position is a vector with x and y values e.g. [1 2]
%repeat the current mass as many times as there are other masses to compare with
currentMassPosition = repmat(obj(currentMass).position, length(obj), 2);      
distanceCurrentMassToOthersArray = obj(:).position - currentMassPosition;

我不能在对象数组上使用冒号索引操作。目前我使用for循环遍历每个对象。您是否有任何提示可以在不使用for循环的情况下优化它?

我希望我的问题足够清楚,否则我会优化它;)。

1 个答案:

答案 0 :(得分:3)

我使用此代码重现您的问题。对于将来的问题,请尝试将这些示例包含在您的问题中:

classdef A
    properties
        position
    end
    methods
        function obj=A()
            obj.position=1;
        end
    end
end

%example code to reproduce
x(1)=A
x(2)=A
x(3)=A
%line which causes the problem
x(:).position-3

要理解为什么这不起作用,请查看x(:).position的输出,只需将其输入控制台即可。您会获得多个ans值,表示comma separated list of multiple values。如果您使用[x(:).position]代替,则会获得一系列双打。正确的代码是:

[x(:).position]-3