行列

2016-05-18 2 views
0
から値を見つける方法

レッツは、私が場所Cを見つけたいとAB行列

B=[1 0 1 0 0 1 0 1 0 1 1 0 1 1]; 

から論理1から来行列

A=[0.8 0.9 0.7 0.5 0.3 0.8 0.2 0.1]; % 8 points 

を持っていると言う満たす

C=find(A<0.6 & A>0.35) 

ここでansはです。。私の質問はB=8の本当の場所を取得する方法ですか?あなたがどこかに離れて保存されたインデックスを持っていない場合を除き

+1

Bでのインデックスを取得する方法B(C)についてはどうですか? – drorco

+0

iは1を得たが、私は**私はまだ 'A'と 'B'が接続されているどのような画像を得ることができないと、あなたはB = 8で**真の位置で何を意味しています場所 – Acobot

+0

を見つけたいです。 'B 'には' 8'、 'A'には要素がありません。 – Crowley

答えて

1

、私はあなたがここに選択肢の多くを持っていることを見ることができません。

tmp = find(B); 
idx = tmp(C); 

実際にこのマッピングを複数回使用する場合は、バイナリベクターの代わりにインデックスを格納することをお勧めします。バイナリベクトルが疎である(またはブール値のベクトルでない)場合には、より少ないメモリ量しか必要としないので、メモリ効率が向上します。

あなたもバイナリーベクターを必要とする場合は、あなたが可能にケース・メモリの両方を保存する必要があります。 Matlabでこの種のマッピングを行ったとき、私はバイナリベクトル(マスク)とインデックスベクトルの両方を実際に使用しました。これにより、最初にマスクをインデックスにマッピングしてからフィルタリングされた位置にインデックスを付けることができなくなりました(つまり、毎回tmp = find(B); idx = tmp(C);の部分をスキップして、直接idx = allIdx(C)に行く)。

+0

親愛なるpatrik、関数idx = allIdx(C)のエラーが発生しました。 – Acobot

+0

@Acobot 'allIdx'は関数ではありません。これは、Bの 'allIdx = find(B);'にそれらを格納するベクトルの例として意図されていました。最初の2行はトリックを行い、 'allIdx = find(B);'はBからのインデックスを使用するたびにこれらの行を繰り返さないようにします。これは何らかの形でモデル情報であることを暗示します。関数の終わりにスコープから外れてはいけません(たとえば、構造体を入出力として使用するなど)。 – patrik

+0

thanx patrik、私はそれを持っています – Acobot

0

は、これはあなたに

A=[0.8 0.9 0.7 0.5 0.3 0.8 0.2 0.1]; 
B=[1 0 1 0 0 1 0 1 0 1 1 0 1 1]; 
C=find(A<0.6 & A>0.35); 
temp=0; 
for i=1:size(B,2) 
    temp=temp+B(i); 
    if(temp==C) 
     break; 
    end 
end 
locationB=i; 
locationB 
+0

なぜそれが虚数単位のために予約されているときにカウンターとして 'i'を使用するのですか? – Crowley

+0

@Crowley虚数単位に 'i'または 'j'または '1i'を使用できます。それが使えないわけではありません。 '1i'は実際に予約されています。 –

+0

私は 'i'を上書きして' 3 + 5 * 1i'を評価しようとしましたが、干渉はありません。だからあなたは正しい。それでも 'i'を上書きし、' 3 + 5 * i 'の形式で複素数を使用すると、予期せぬエラーや追跡が困難なエラーが発生するので注意してください。 – Crowley