2016-09-09 6 views
0

私は複素行列cdata、つまり2144x2048を持っています。MATLAB複雑な行列の境界内にある

[row, col] = find(abs(cdata) > threshold); 

rowcolは、複数の値を持つことができます。私は、次の手順を実行して、指定されたthresholdよりも大きいcdataから要素を取得しています。その後、私は次のようにIは、N個の実数X-データのサンプル、およびyデータの33個のサンプルを得るために計算を実行し、行およびCOL値をとる:bwが一定値である

xdata = real(cdata(row(i),col(i)-bw:col(i)+bw)) 
ydata = real(cdata(row(i)-bw:row(i)+bw,col(i)-bw:col(i)+bw)) 

その取得する必要があるサンプルの数を決定します。私ことを保証することができる方法

??? Subscript indices must either be real positive integers or logicals 

:この計算は、具体的xdataためcdataの柱部とydataためcdataの行部分の間、Iは行列の境界を超え、MATLABは、次のエラーをスロー限界を超えないでください。境界を越える場合は、行/列ペアをスキップする必要があります。

答えて

1

問題が発生したのは、マトリックスの端から近くに検索を制限していないためです。bwこれは、マトリクスのエッジ付近の閾値を超える値を見つけることを可能にすることを意味する。これらのインデックスからbwを加算または減算すると、範囲外になります。このように検索を制限することができます。

[row, col] = find(abs(cdata(bw+1:end-bw,bw+1:end-bw)) > threshold); 
row = row + bw; 
col = col + bw; 

これはあなたの行と列のインデックスはあなたがそれらを囲む領域をつかむときに、あなたが範囲外に行くことはありませんされた範囲内であることを保証します。

サイドノートです。コード内のydata変数は、行列の四角い領域全体を索引付けし、xdataは行のセクションの索引付けのみを行います。 ydataは実際にydata = real(cdata(row(i)-bw:row(i)+bw, col(i)))になりますか?

+0

素晴らしいソリューションです。そしてはい、あなたはydataについて正しいです、私はタイプミスです。 – DeeTee

関連する問題