-1

大きな三角行列があります。

ここに画像の説明を入力

これには、さまざまな色でマークされた関連データがあります。緑がかった黄色がかった輪郭でマークされたポイントを条件付きで削除したい:

  • 非線形オブジェクトの領域で貪欲に削除します
  • 50% の確率で線形オブジェクトの領域を遅延除去します。

私の試み

シャイさんのコメントをもとに走ります

% remove linear things on nonlinear area lazily: matrix(97:103, 1:98)
% remove linear things greedily elsewhere
for row=0:97
    for column=0:111
        % Lazy removal
        if and(row > 97, row < 104)
            if and(column > 0, column < 98)
                if randn > 0
                    matrix( matrix < 9 ) = 0;
                end
            end
        end

        % Greedy removal
        if or(column < 97, column > 104)
            % Remove all points in these regions because no linear objects here
            matrix(:, 1:97) = 0;
            matrix(:, 104:111) = 0;
        end
    end
end

私は得る

ここに画像の説明を入力

これは無条件の削除よりもはるかに優れています

ここに画像の説明を入力

ただし、遅延削除の条件付き部分は改善することができます。ここではShaiの短いバージョンを使用できないと思います。条件付きの削除があるため、ネストされたループを使用する必要があります。

contour(matrix, clines)非線形オブジェクトが線形オブジェクトもカバーするため、等高線は使用できません。したがって、貪欲な削除と怠惰な削除のために、図の特定の領域を選択して条件付きで削除する必要があります。Daniel R のコマンド はcontour(...,'ShowText','on')、ここでは役に立たないようであり、単純に値で削除することはできません。次の図は 111 個の特異点があるはずなので、おそらく特異点であるゼロ点を示していると思います。 次の図は、データの特異点またはゼロ値のみを示していますか?

ここに画像の説明を入力

線形オブジェクトの領域に特定の除去ルールを適用するにはどうすればよいですか?

Matlabの三角行列で緑がかった黄色がかった色でマークされているポイントを条件付きで削除するにはどうすればよいですか?

4

2 に答える 2

2

あなたのデータは複雑です。それを知っていて、contour関数が複素数で何をしているのかを知っていれば、実数部をプロットするだけで、データを簡単にフィルタリングできます.

マトリックスのすべての要素を に設定NaNするだけで、元のプロットでカラーバーをプロットして値を推測するだけでしきい値を見つけることができます。または、データマトリックスの実部などを見てください。

必要に応じてしきい値を調整します

比較のためにカラーバーが等しくなければならないことに注意してください

load('tri4_good.mat');
%original plot
figure(1)
[~,h] = contour(samii);
colorbar
caxis([-2,1.5].*10^7)

%get data
X = get(h,'Xdata');
Y = get(h,'Ydata');
Z = real(samii);
%this plot equals the original one
figure(2)
contour(X,Y,Z)
colorbar
caxis([-2,1.5].*10^7)

%therefore the Z-Data is equal to the real part of your data
%X and Y are the indices of your data matrix
%set the threshold as desired
thresh = 0.1*10^7;

idx = find( abs(Z) < thresh);  %or what condition you like to use.
Z(idx) = NaN;

%filtered plot
figure(3)
contour(X,Y,Z)
colorbar
caxis([-2,1.5].*10^7)

あなたにあげる:

ここに画像の説明を入力


すべてのコメントに関して、次の行が正しい方法です。

Z = abs(samii);
idx = find(Z == 0);
Z(idx) = NaN;

%filtered plot
figure(1)
contour(Z);
colorbar
caxis([-2,1.5].*10^7)

戻り値:

ここに画像の説明を入力

これがニーズに合わない場合は、すべてを完全に考え直す必要があります;)

于 2013-11-18T14:33:14.690 に答える
1

簡単な方法として、マトリックス要素の値を変更し、それが VALUE と等しくない場合は 0 に変更します。配色で緑/黄色の色番号 VALUE を尋ねて、それが VALUE=125 であるとします。

for i=1:size(matrix,1)
   for j=1:size(matrix,2)
     if(matrix(i,j)==125)
        matrix(i,j) = 0;
   end;
end;
于 2013-11-17T14:03:18.230 に答える