2

1x160 (a) と 80x1(b) の 2 つの cell 配列を比較しようとしています。私のセル配列は、内部に多数の文字列を持つセルで構成されています。各文字列を比較して、等しいかどうかを確認し、等しい場合は新しい配列に挿入するか、そうでない場合は 0 を挿入します。そのための機能が見つかりません。「isequal」、「strfind」などを試しました。それらのすべてが次のエラーメッセージを表示します:

入力引数のいずれかがセル配列の場合、最初の引数は文字列のセル配列で、2 番目の引数は文字配列でなければなりません。

これが私のコードです!

function [inter]=Intersect2(a,b)
int=cell(0);
b2=[b;b];

for i=1:length(a)   
    if a{i,1}==b2{i,1}(1) ( or 'isequal','strfind')
       int{i}=a{i};
    else
        int{i}=0;
    end     
end
4

1 に答える 1

8

文字配列を比較するには多くの方法がありますが、そのうちの 1 つが ですstrcmp

cellfunループを避けるためにも使用します。

a = {'Dude', 'I', 'am', 'a', 'moose'};
b = {'Well', 'I', 'am', 'a', 'mouse'};

index = cellfun(@strcmp, a, b);

aこれにより、 の各要素がの対応する要素と比較され、要素が一致する場合と一致しない場合のb論理配列indexが返されます。10

これを使用して、一致する値を割り当てます。

int = cell(1, length(a));
int(index) = a(index);

整数 =

[] '私は' []

必要に応じて、この概念を拡張して集合交差点を見つけることができます。

于 2012-12-02T20:32:08.283 に答える