Matlab 用等效的可矢量化解决方案替换冒号运算符

Matlab 用等效的可矢量化解决方案替换冒号运算符,matlab,octave,Matlab,Octave,我当前的代码如下所示: for offset = 0:0.9:max_offset : x = offset:step_size:max_value; [...] end 我想对for循环进行矢量化并删除它以使其更快,但如果我尝试将offset设置为向量,则第二行的冒号运算符相当于执行以下操作 x = offset(1):step_size:max_value; 达到预期效果的最有效方法是什么,即获得 x = [ 0:step_size:max_value;

我当前的代码如下所示:

for offset = 0:0.9:max_offset :
    x = offset:step_size:max_value;

    [...]

end
我想对for循环进行矢量化并删除它以使其更快,但如果我尝试将
offset
设置为向量,则第二行的冒号运算符相当于执行以下操作

x = offset(1):step_size:max_value;
达到预期效果的最有效方法是什么,即获得

x = [ 0:step_size:max_value;
      0.9:step_size:max_value;
      1.8:step_size:max_value; ... ]

假设我不知道
max\u offset
,因此不知道
x

中我想要的行数的长度,因为每个向量的大小不同,所以它们不容易适应矩阵。您必须将它们放入单元格数组中,如下所示:

offset=0:.9:max_offset;
x=arrayfun(@(k) k:step_size:max_value,offset,'UniformOutput',false)

对于矩阵,您不必通过
x(i,:)
引用
x
行,而应该通过
x{i}
得到正确的向量。

由于x的长度会随着迭代的不同而变化,您无法将所有x存储到矩阵形式中,这主要意味着使用单元数组,这对性能没有真正的帮助,除非您确实想要
x
作为
单元格
。因此,您必须确保循环中的其余代码高效。这比保持for循环快吗?我不确定。对于较小规模的问题可能是这样,但性能可能不会有太大差异。事实上,我刚想到另一种方法。执行
x=0:step\u size:max\u value
然后,您只需执行
x(i:end)
即可获得所需的值,而不必获取
x
矩阵
x(i:end)
的第四行。