如何多次循环一维数组元素?
How to loop through 1D array elements multiple times?
假设 size_of_array < n
,多次遍历数组元素,通常我会使用类似(在 C++ 中)的东西:
for (size_t i = 0; i < n; ++i)
{
elem = arr[ i % size_of_arr ];
}
如果 arr = {1, 2, 3};
,对于 elem
我会得到:
1 2 3 1 2 3 ...
但是,在 MATLAB / Octave 中索引从 1
开始并且:
for i = 1 : n
elem = arr( mod( i, length(arr) + 1) );
end
所以当 n == length(arr)
我得到一个错误:
error: arr(0): subscripts must be either integers 1 to (2^31)-1 or logicals
索引从1开始是怎么做到的?
在 C++ 中你会做
arr[ i % size_of_arr]
其中内部索引 i % size_of_arr
在 [0 size_of_arr-1]
范围内
在 MATLAB 中,i
在 [1 size_of_arr]
范围内,因此只需更改为
mod( i-1, numel(arr) ) + 1
第一位 (mod( i-1, numel(arr))
) 确保索引在 [0 size_of_arr-1]
内,您只需向其加 1。
假设 size_of_array < n
,多次遍历数组元素,通常我会使用类似(在 C++ 中)的东西:
for (size_t i = 0; i < n; ++i)
{
elem = arr[ i % size_of_arr ];
}
如果 arr = {1, 2, 3};
,对于 elem
我会得到:
1 2 3 1 2 3 ...
但是,在 MATLAB / Octave 中索引从 1
开始并且:
for i = 1 : n
elem = arr( mod( i, length(arr) + 1) );
end
所以当 n == length(arr)
我得到一个错误:
error: arr(0): subscripts must be either integers 1 to (2^31)-1 or logicals
索引从1开始是怎么做到的?
在 C++ 中你会做
arr[ i % size_of_arr]
其中内部索引 i % size_of_arr
在 [0 size_of_arr-1]
在 MATLAB 中,i
在 [1 size_of_arr]
范围内,因此只需更改为
mod( i-1, numel(arr) ) + 1
第一位 (mod( i-1, numel(arr))
) 确保索引在 [0 size_of_arr-1]
内,您只需向其加 1。