在我的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循环的情况下优化它?
我希望我的问题足够清楚,否则我会优化它;)。
答案 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