私はMatlabの高速実装を探しているという単純な問題があります。私は、値の配列を持っている、のは言わせて:||へのオペランド&&演算子は論理スカラ値に変換可能でなければなりません
a = floor(rand(5,5).*255)
私はその後、同様のサイズの閾値配列を持っている、のはそれだとしましょう:
a_thresh = floor(rand(5,5).*255)
a
内の値については、彼らが対応するよりも0.5倍小さい場合
a(a < a_thresh.*0.4) = 0
a(a > a_thresh.*1.2) = 0
0:
すなわち、同様に1.2倍のため
a_thresh
の値もゼロに設定する必要があります -
a_thresh
の値Iは、出力が0になりたいです
0.4xと0.5x、1.0xと1.2xの間の値については、比例した量が必要です。それ以外の場合は0.5と1.0の間で、a
の値を変更しません。
オペランドを||ために:私はというエラーを取得し、しかし
a(a>= a_thresh .* 0.4 && a <a_thresh.* 0.5) = ((a - a_thresh.*0.4)/(a_thresh.*0.5 a_thresh.*0.4)) .* a;
:私は、次のようなものを使用することができると思いましたそして& &操作は、これを解決する方法上の任意のアドバイス論理スカラー値
に変換可能でなければなりませんか?明らかに、私はこれを行うためにループを使うことができました。それは簡単ですが、私はコードをベクトル化したままにしておきたいと思います。
素晴らしい - それは&&&問題に対処する - 私はいくつかのことを知らなかった、ありがとう!右の要素の数が左の要素の数と異なるという小さな問題があります。これを修正するスマートな方法はありますか? – trican
@trican私はそれをうまくいった、更新を参照してください。 –
多くの皆さん、ありがとうございますEitan - あなたのソリューションは完璧に動作します - そして、私のMatlabの仕事のどこで他のものを使うことができるか分かります – trican