基本的に、乱数のリストがあるとしましょう: x = {3,5,6,7,8,11,13,14,16,22,25}
.
これらの数字をループしたいのですが、インデックスを実際にはそれぞれの数字にしたいのです。だから私がした場合:
for i = x{1} : x{length(x)}
disp(i);
私は、、、、、、、、などにi
なりたいです...基本的に、
次の番号と現在の番号の差を求め、それをステップにし3
ます。5
6
7
8
11
13
基本的に、乱数のリストがあるとしましょう: x = {3,5,6,7,8,11,13,14,16,22,25}
.
これらの数字をループしたいのですが、インデックスを実際にはそれぞれの数字にしたいのです。だから私がした場合:
for i = x{1} : x{length(x)}
disp(i);
私は、、、、、、、、などにi
なりたいです...基本的に、
次の番号と現在の番号の差を求め、それをステップにし3
ます。5
6
7
8
11
13
あなたが探しているものがmatlabに存在するかどうかはわかりません。これをするつもりです:
for j = 1:x{size(x,2)}
disp(x{j}); % or any other processing,
% % you can also set i=x{j} and do what you wanted to do with i.
end
vectorの場合、 の要素が の要素でx
ある新しい vector を作成する場合は、次を使用できます。result
ith
result
x(i)th
x
result = x(x);
これは次と同等です。
result = zeros(length(x));
for i = 1:numel(x)
index = x(i);
result(i) = x(index);
end
しかし、それははるかに高速である必要があります。これは、コードをベクトル化し、実行を高速化するのに役立つ場合があります。ただし、要素をループする必要がある場合 (可能な限り MATLAB でループを避けるのが最善です)、次を使用できます。
for i = 1:numel(x)
disp(x(x(i)))
end
これは少し複雑ですが、機能します。
警告: の要素x
が のサイズを超えx
ないようにする必要があります。そうしないと、エラーが発生します。また、 の各要素はx
整数でなければなりません。
編集:この上記の方法は、私が最初にあなたの質問を解釈した方法であるベクトル用です。セル配列の場合、オプションがもう少し制限されているようです。以下を使用するよりも高速な方法を見つけることができませんでした。
index = zeros(numel(x),1);
for i = 1:numel(x)
index(i) = x{i};
end
これは以前に取り上げました。最初にベクトルが必要な場合に備えて、今のところ答えを残しておきます。