0

for長さ 3 のセル配列があり、長さ の別のセル配列でループを作成したい6ので、最初の配列に 3 つのセルを追加して、2 つのセル配列を等しくし、forループを使用するにはどうすればよいですか? MATLAB?

たとえば、2 つの入力がある場合:

type = { '12' '62' '5' };
colour = {'re' 'green' 'yellow' 'brown' 'blue' 'black'};

for i = 1:length(colour)
    if isequal(colour(i), type(:))
        result(i) = type(i);
    else
    end
end

typeセル配列と同じサイズのセル配列を作成する必要がありcolourます(セル配列の横に3つの空のセルを追加する必要があると思いますtype)。

4

1 に答える 1

2

まず、コードのいくつかの問題に対処する必要があります。

  1. セル配列を使用する場合、中かっこ ( {}) を使用してセル配列から要素を抽出する必要があります。書く代わりに、書くcolour(i)べきですcolour{i}

  2. これは問題ではありませんが、良い習慣の問題です。elseステートメントの一部を処理する必要がない場合はif、まったく記述しないでください。

  3. ループ内で配列が大きくならないようにメモリを事前に割り当てます (プログラムの速度が低下します)。具体的には 、ループのresult = cell(size(colour));前に行を追加します。for

  4. あなたのisequal論理には欠陥があります。実際には、は 1 つの要素であり、多数でfalseあるため、常に返されます。colour{1}type{:}

  5. あなたの例によれば、types数字とcolours文字が含まれていますが、どちらも文字列です。2つを比較することに意味はありますか?

さて、あなたの質問に関して、forループの実行方法を決めるのはあなた次第です。達成したいことについて言及していないため (正確に何を言うのではなく、何かをどのように達成したいかを尋ねる)、for必要に応じて、ループがどのように見えるべきかを言うことはできません。ismemberの代わりに使用するつもりだったのかもしれませんisequal。その場合、修正コードは次のようになります。

result = cell(size(colour));
for i = 1:length(colour)
    if ismember(colour{i}, type)
        result{i} = type{i};
    end
end

または短く、次のように:

result = cell(size(colour));
[found, idx] = ismember(colour, type);
result(found) = type{idx(found)}

詳細を教えていただければ、より役立つように回答を絞り込むことができるかもしれません。

于 2012-10-30T14:06:49.750 に答える