2010-12-14 12 views
2

以下のデータを使用してfinalAnswerと同等の文字列を見つけることができません。してください、私は/ forループを使用することはできません!最終的な答えは、(mainDataの最後の2列に基づいfinalAnsのものと一致mainDataの各行のエントリを取得するために、アレイ(mainData即ちフォーマット)セルから行列へのマッチング/マップ/セル演算(MATLAB)

mainData = {'IBM' [201] [1] ; 
      'GE' [403] [1] ; 
      'MSFT' [502] [3] ; 
      'GM' [101] [2]  } ; 

finalAns = [ 101 2 0.5; 403 1 0.6 ]     ; 

%% I tried doing this -> 
temp = cell2mat(mainData(:,[2 3])) ; 

tf = ismember(temp, finalAns(:,[1 2],'rows') ; 
secIDs = mainData(tf) ; 
+0

出力として正確に何をしたいですか? 'finalData'の2番目と3番目の列が一致する' mainData'の行だけを選択しようとしていますか? – gnovice

+0

Thnx。私は答えを 'GM' [101] [2] [0.5]; 'GE' [403] [1] 0.6] – Maddy

+0

OR→ 'GM' [101 2 0.5]; 'GE' [403 1 0.6] – Maddy

答えて

2

として各要素に好ましいですそして、彼らはfinalAnsおよび添付finalAnsの最後の列に表示されるのと同じ順序でそれらをfinalAnsの最初の2列)を取得するために、あなたはこれを行うことができます。

>> temp = cell2mat(mainData(:,2:3)); 
>> [isThere,index] = ismember(finalAns(:,1:2),temp,'rows'); 
>> output = [mainData(index(isThere),:) num2cell(finalAns(isThere,3))] 

output = 

    'GM' [101] [2] [0.5000] 
    'GE' [403] [1] [0.6000] 

出力は2バイです4セルアレイを、別々のセル内の各値と共に使用します。今は第二のセル2行2列のセル配列を持つ

>> temp = [temp(index(isThere),:) finalAns(isThere,3)]; 
>> output = [mainData(index(isThere),1) num2cell(temp,2)] 

output = 

    'GM' [1x3 double] 
    'GE' [1x3 double] 

注:あなたは、ベクターに収集することができるために、最後の3つの列が必要な場合は、これで上outputの計算を置き換えることができます列には、1行3列の二重配列が含まれます。

+0

パーフェクト! .csvファイルに出力できる2 * 4セル配列が必要でした。本当にありがとうございました! – Maddy

関連する問題