[英]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.