繁体   English   中英

带范围表达式的Matlab替换循环

[英]Matlab Replacing Loop with Range Expression

我有一个名为buildRay函数,该函数返回1x4矩阵。 我多次这样称呼它:

rays = zeros(numRays, 4);
for j = 1:numRays
    rays(j, :) = buildRay(particle, (j-1)*anglePart, rayLength);
end

如果我尝试将循环替换为:

rays(1:numRays, :) = buildRay(particle, ((1:numRays)-1).*anglePart, rayLength);

我收到以下错误

??? 下标分配尺寸不匹配。

我不明白为什么。

有人可以告诉我我在做什么错吗?

谢谢。

作为错误消息状态,您的左右表达式具有不同的大小。 您不能在MATLAB中执行此操作。

为了避免循环,可以使用ARRAYFUN函数:

rays = arrayfun(@(x) buildRay(particle, ((x-1).*anglePart, rayLength), 1:numRays);

需要更改buildRays接受的输入参数的向量(或矩阵),并返回一个矩阵适当大小(即,不总是1x4 -如果输入矢量是N元件,返回Nx4矩阵)。

现在,您正在尝试将1x4向量分配给numRays x 4点-因此出现错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM