2

私は、センサー融合にBrooks-Iyengar algorithmを実装しようとしていて、MATLABで次のようなデータ構造を表現しようとしています。 この多値データ構造の要素をどのように表現してアクセスするのですか?

A = {([1.5,3.2],4), ([0,2.7],5), ([0.8,2.8],4)} 

は、私は次の

B = {{[1.5,3.2],4},{[0,2.7],5}} 

をやってみました。しかし、私は、各要素にアクセスする方法がわからない、すなわち1.53.24だけでなく、値の次のセット。 B{1}から1セットの要素が得られますが、その後は個々の値を取得できません。適切なリンクへ

任意のアイデアやポインタが参考になります。現在の構造では

答えて

4

、あなたは単にインデックス作成を続けることができます。

>> B{1} 

ans = 

    [1x2 double] [4] 

>> B{1}{1} 

ans = 

    1.5000 3.2000 

>> B{1}{1}(2) 

ans = 

    3.2000 

>> B{1}{2} 

ans = 

    4 

あなたは、次の構文B(1) = [];使用できる主な構造から項目を削除するには:あなたは

>> B = {{[1.5,3.2],4},{[0,2.7],5}} 

B = 

    {1x2 cell} {1x2 cell} 

>> B(1) = [] 

B = 

    {1x2 cell} 

>> B{1} 

ans = 

    [1x2 double] [5] 

>> 

をまた、(いくつかの優れた性質の命名で)structure arrayでデータを表現することを選択することができる:

>> s = struct('prop1',{4, 5},'prop2', {[1.5,3.2], [0,2.7]}) 

s = 

1x2 struct array with fields: 

    prop1 
    prop2 

>> s(1).prop1 

ans = 

    4 

>> s(1).prop2 

ans = 

    1.5000 3.2000 

>> s(1).prop2(2) 

ans = 

    3.2000 
は、あなたが同様の構文を使用することができ、項目を削除するには:

s(1) = [] 

あなたはデータ要素のいくつかの操作を実行したい場合、あなたはまた、OOPのアプローチで行くことを選択することができ、単一のデータ要素を表すクラスを作成し、オプションでデータセット全体を表すクラスを作成します。データメンバーへのアクセスは当然です。

+0

素晴らしく見えます。最初の構造からどのようにデータエントリ( '{[1.5,3.2]、4}')を削除するのですか? – bhatGautam

+1

元または構造体配列の手法を使用して要素を削除する方法に関する解答が更新されました。 – DVarga

+0

しかし、私がB {1} = []を行うと、セルのサイズは縮小しません。空のエントリがあります。空のセットも削除する方法はありますか? – bhatGautam

1

あなたはセルを使用する上で死んでセットされている場合、私はcell2matで始まるだろう、それがアウトに役立ちますかどうかを確認します。

vals = cell2mat(B{2}) % returns the array vals=[0 2.7 5] 

あなたは、単に最初から通常の行列としてデータを使用することができます。

B = [ 1.5, 3.2, 4; 0, 2.7, 5]; 

そして、それはあなたの意思だった(と彼らは数値で)あれば、あなたのキーとして、列3を利用しています。キーが保証されていない場合は、構造体が便利です。

編集:DVargaは、より詳細かつ有用な答えを与える、私は思います。

2

あなたのMATLABのバージョンが十分に新しい場合(すなわち> = R2013b)あなたはこのためtable使用することができます:あなたが見ることができるように

A = table([1.5,3.2; 0,2.7; 0.8,2.8],[4; 5; 4],'VariableNames',{'name1','name2'}); 

enter image description here

を、結果を視覚的に(検査することは容易です)とアクセスにも簡単に:

A.name1(3,2) % is 2.8000 
関連する問題