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开始时,这是如何实现的
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