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)
的第四行。