Matlab 如何多次循环1D数组元素?
假设数组的Matlab 如何多次循环1D数组元素?,matlab,octave,Matlab,Octave,假设数组的size\u
size\u
,要多次迭代数组元素,通常我会使用类似(在C++中):
但是,在MATLAB/Octave中,索引从1开始,并且:
for i = 1 : n
elem = arr( mod( i, length(arr) + 1) );
end
所以当n==length(arr)
我得到一个错误:
错误:arr(0):下标必须是整数1到(2^31)-1或逻辑数
当索引从1开始时,这是如何实现的在C++中你会做< /P>
arr[i%size\u of\u arr]
其中,内部索引i%size\u of_arr
在范围[0 size\u of_arr-1]
在MATLAB中,i
在[1 size\u of\u arr]
范围内,因此只需更改为
mod( i-1, numel(arr) ) + 1
第一位(mod(i-1,numel(arr))
)确保索引在[0 size\u of_arr-1]
内,您只需在其中添加1即可。其惯用形式是mod(i-1,n)+1
(我称之为基于1的模)。因此,可能elem=arr(mod(i-1,length(arr))+1)
适用于您(我不确定您想要实现什么)永远不要使用length
,它返回最长维度的长度。相反,请使用numel
(元素数)。错误:arr(0):
零正是Matlab试图对您大喊大叫的地方。@LuisMendo感谢您的帮助,它工作得非常好。如果您对使用感兴趣,请检查:谢谢!所以,我们要做的是将索引偏移到零原点,然后调整模运算的结果,从1开始,对吗?
for i = 1 : n
elem = arr( mod( i, length(arr) + 1) );
end
mod( i-1, numel(arr) ) + 1