-1

基本的に、乱数のリストがあるとしましょう: x = {3,5,6,7,8,11,13,14,16,22,25}.
これらの数字をループしたいのですが、インデックスを実際にはそれぞれの数字にしたいのです。だから私がした場合:

for i = x{1} : x{length(x)}

    disp(i);

私は、、、、、、、、などにiなりたいです...基本的に、 次の番号と現在の番号の差を求め、それをステップにし3ます。56781113

4

3 に答える 3

0

あなたが探しているものが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
于 2013-07-01T15:16:54.887 に答える
-1

vectorの場合、 の要素が の要素でxある新しい vector を作成する場合は、次を使用できます。resultithresultx(i)thx

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

これは以前に取り上げました。最初にベクトルが必要な場合に備えて、今のところ答えを残しておきます。

于 2013-07-01T15:19:13.293 に答える