5

私は構造化されたグリッドを扱っています。各ノードのインデックスを示す (m,n) 型のテキストをプロットに追加したいだけです。そして将来的には、代わりに変数の値になるかもしれません。テキスト機能を使っています。コードのプロファイリングを行ったところ、ほとんどの時間がその関数に費やされました。これは 101*101 グリッドのみです。これを増やすと、コードは基本的に動かなくなります。text と spritnf のループを回避するように既に最適化しましたが、それでも遅すぎます。さらに、プロットが作成されると非常にスタックし、パンまたはズームするたびに数秒かかります。以下の最小限の例を参照してください。グリッドを表示するために使用するパッチも追加しました。(各セルにいくつかのグリッド量をプロットしたいのでパッチを使用し、不規則なポリゴンを含む非構造メッシュに移動する場合に備えて一般的に保ちたい.パッチは超高速ですが、問題はありません). これをスピードアップするための提案はありますか?ありがとう

    %define grid and grid numbering
    DX = 10 ; %=DY
    mmax = 101; %= number of nodes in x
    nmax = mmax %= number of nodes in y
    [ x y ] = meshgrid(0:DX:DX*(mmax-1),0:DX:DX*(mmax-1)); %grid
    [ mMAT nMAT ] = meshgrid(1:mmax,1:nmax); %grid numbering
    %
    %display patch
    %
    cont = 0
    for m=2:mmax
        for n=2:nmax
            cont=cont+1;
            Xpatch(1:4,cont) = [ x(n-1,m-1) ; x(n-1,m) ; x(n,m) ; x(n,m-1) ] ;% ii+1 since it has the BC
            Ypatch(1:4,cont) = [ y(n-1,m-1) ; y(n-1,m) ; y(n,m) ; y(n,m-1) ] ;
            Zpatch(cont) = 1;
        end
    end
    hpatch3 = patch(Xpatch(:,:),Ypatch(:,:),Zpatch(:)');
    %
    % display node indices
    %
    charINPUT = regexp(sprintf('(%d,%d)\n',mMAT(:),nMAT(:)),'(?<=\s*)(\S*)(?=\n)','match'); % use regexp to vectorize sprintf and so avoid slow loops with sprintf 
    text(x(:),y(:),charINPUT(:),'Clipping', 'on');
    set(gcf,'position',[9 40 1350 650])
    set(gcf,'PaperPositionMode','auto')
4

3 に答える 3

3

みんな私は解決策を見つけました。!!!!!に設定hittestするだけで 100 倍速くなります。'off'これは私がしました:

text(x(:), y(:), charINPUT(:), 'Clipping', 'on','hittest', 'off');

そして私の人生は変わりました。

ありがとう。A.

于 2014-02-04T17:22:03.473 に答える
0

同様の問題がありました。多くの個別の呼び出しではなくベクトルを提供することで、テキストへの呼び出しの数 (私の場合は ~500 から 1 に) を減らすと、パフォーマンスが大幅に向上することがわかりました。私の特定のケースでは、1 つのグラフを表示するのに 25 秒から 2 秒になりました。

私にとって、ヒットテスト オフ メソッドにはパフォーマンス上の利点はありませんでした。

于 2015-12-16T15:38:46.530 に答える