は、通常、私は(C++で)のようなものを使用することになり、配列の要素を介して複数回反復する、size_of_array < n
と仮定すると:1D配列要素を複数回ループする方法は?
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から開始すると、これがどのように行われますか?インナーインデックスi % size_of_arr
は、MATLABで[0 size_of_arr-1]
、i
範囲[1 size_of_arr]
である範囲内にある場合
そのための慣用形式は 'mod(i-1、n)+ 1'です(私はそれを_1ベースのモジュラス_と呼んでいます)。それで、おそらく 'elem = arr(mod(i-1、length(arr))+ 1);'あなたのために働きます(私はあなたが達成しようとしているものがわかりません) –
'length'を決して使用しません。最長寸法の長さ。代わりに 'numel'(要素の数)を使用します。 – carandraug
'error:arr(0):'ゼロはMatlabがあなたに叫んでいるものです。 – Yvon