4

これに対する基本的なアプローチは、行列を印刷することです。しかし、より大きな数になると、デバッグ中であっても (アルゴリズムは 2 x 2 または 4 x 4 の行列では機能しない可能性があります)、非常に速く毛むくじゃらになり始めます。

これは、デバッグ中に常に結果を出力して他のプログラムにパイプできるため、言語固有または言語に依存しない可能性があります。

この場合、矛盾を見つけるためにどのようなトリックを使用しますか? 基準を使っていますか?オーディオ?ビデオ?他の(混合)表現?

これが漠然としていることは承知していますが、私の現在の状況に当てはまるかどうかは気にしません。将来的にはそうなるかもしれませんし、他の人がどのようにデバッグに取り組んでいるかを見ることは常に生産的です。

4

6 に答える 6

1

重要なルールが 1 つあります。それは、データ内で探しているものを取得する時間です。これには通常、次のものが含まれます。

  • データをエクスポートする時間 (シリアライズ / ダンプ)
  • データを処理する時間 (インポートとクリーンアップ / フィルター)
  • 探しているものを見つける時間 (locate)

表示したいものに応じて、通常は次のようにします。

  • データセットを集約・縮小して、見たいものだけを表示できるようにします。例: a から b までの値、日付が D より前など…</li>
  • 効率的な方法でデータを表示します。明らかに、NxN は通常、画像として表すことができます。これは、画面に何かを表示する最も自然な方法です。1xN の場合、この配列の代わりに行列を作成するために信頼できる周期性はありますか?
  • 色を使用する : 関心のある値に色を付けます。色を使用すると、脳が関連する値を効率的に見つけることができます。赤字が赤字で​​表示される会計を考えてみてください。
  • Unse animations : 色よりもはるかに難しく、値のちらつきは色と同じくらい早く気づきます。

注: 3D に移行することもできます。つまり、データを 3D に変換して視覚化しやすくしますが、音声には変換しません (データセットが明らかに音声自体に直接関係していない場合)。

コーディングに関して:

  • 内部デバッガーはまだあります。GCC には、印刷オブジェクトや要約形式の編集など、コンソールで呼び出すことができる機能があります。これらは、ブレークポイントにいて、何か [どこか] が何であるかを単に知りたい場合に効率的です。または、データ ブロックのカスタム構造体をより適切に表示したいだけです。どのスクリプト言語でも、ブレークポイント内またはデータが存在する場合はいつでもこれを行うことができます。外部ツールの使用は次のとおりです。
  • 最速だが最悪の方法は、現在のメモリをファイルにダンプすることです。これにより、たとえば 16 進数リーダーで分析または読み取ることができます (一部のコード エディターにはこの機能が組み込まれています)。
  • 2 番目のアプローチは、このタスクにスプレッドシートを使用することです。その後、データを CVS 形式にエクスポートし、適切なシリアライザーをコーディングするだけで済みます。これは、データのグラフを作成したい場合に特に便利です...</li>
  • 私がときどき使用する 3 番目のアプローチは、データを JSON でエクスポートすることです。JSON 形式は XML よりも優れています。とにかく… データを読み込んで表示するための小さな Web ページを作成するのは非常に簡単です。私は http に慣れているので、アルゴリズムの正しさを検証するためにこのトリックをよく行います。巨大なダンプの場合は、MongoDB (JSON 用) などの nosql データベースに JSON をインポートするか、SQL データベースの CVS でエクスポートした場合に、JSON をインポートすることもできます。
  • 明らかに、GUI で言語を使用している場合、キャンバスに独自のプロットをコーディングすることはオプションかもしれません。視覚化は簡単ですが、結果を得るには長いコーディングが必要です (このためのフレームワークの使用を検討してください)。
  • Mathlab / GNU Octave 形式にエクスポートすると、組み込みの視覚分析ツールとプロットを使用できるようになります
  • 私が時々使用し、私が本当に気に入っているのは、データを 32 ビット イメージでエクスポートすることです。この画像は、mathlab を含むほとんどすべてのもので開くことができますが、gimp/photoshop などの画像エディターでも開くことができます。独自のイメージ アナライザーをコーディングする必要がある場合は、ImageJ を試すか、または (もっと面白い) http://glsl.heroku.comなどのシェーダー ビルダーを使用します。最後のオプションは、データとそれを処理/表示するためのコードの両方を引き続き使用できるため、適切なオプションです。OSX ユーザー向けには、デスクトップ アプリとしても機能する OpenGL Shader Builder があります。最後のアプローチは、テクスチャを介して実際にデータをインポートし、シェーダーをコーディングし、最後に入力パラメーター (たとえば、しきい値など) を微調整してライブで結果を確認できるため、私にとっては非常に重要です。最初に書いたように、探しているものをエクスポートしてからローカライズするまでの時間が重要です。このアプローチを使用すると、OpenGL と頭脳の両方のおかげで、検索の処理と時間を大幅に削減できます。
于 2013-05-06T15:42:21.657 に答える
1

私の経験から、マトリックスは実際のコンテンツを表す方法で出力されます。すべての値を表す文字列を作成し、それらのサイズを知っていれば、スペースを使用してそれらすべての位置を調整できます。しかし、お気づきのように、大きなマトリックスは印刷サイズが非常に大きくなります。

あるいは、それらの次元だけでなく、それらについて持っているいくつかの情報を印刷することもできます - ヒルベルト行列を作成し、何も変更しなかった場合、それについての通知を表示できます。

あなたがtoString()方法またはそれに相当する方法に限定されている場合、どの情報があなたにとって最も重要かを判断する必要があります。しかし、多くの場合、目的言語であろうと構造言語であろうと、情報のさまざまな部分を表示する専用のクラス/関数を簡単に作成できます。

さらに、たとえば Java では、デバッグ中に式を使用してオブジェクトのメソッドを呼び出すことができるため、ディメンションのみを表示しtoString()、別のメソッド ( dump()?) を作成してその内容を完全に表示することができます。

式やブレークポイントを使用できない場合は、デバッグ目的でのみ、すべての追加情報をコンソールではなくファイルに書き込むことができます。たとえば、Cでは、出力ストリームでグローバル変数を使用できます。たとえば、何も表示しない場合はnull、設定した場合は標準出力/ファイルです。

全体として、選択する言語に大きく依存します。クリーンまたはダーティとして認識されるアプローチを自動的に決定します。しかし、追加情報を保存し、それを表示するいくつかの方法またはレベルを作成し、必要なものを選択することは、私には良い考えのように思えます.

例、Javaでこの問題にどのようにアプローチしますか:

  • toString()のようなものを表示するためにオーバーライドします[matrix: 4x4, square(det = 5.33323, dim = 3)]

  • dump()すべての値を含む書式設定された文字列を返すcreateメソッド、

  • dumpForMatlab(File)行列を Matlab/Octave 形式で保存するcreateメソッド。

デバッグ中:

  • 基本的な情報はオブジェクトのプレビューで利用できます。

  • 内部で何かが変更されたかどうかを確認したい場合、式は完全な行列を表示します。

  • より深い分析は、Matlab/Octave または行列を扱う専用の他のツールによって行われます。

もちろん、もし私がCIを使っていたら、言語と利用可能なツールに合わせて私のアプローチを変えるでしょう.

于 2013-05-05T13:04:48.157 に答える
-3

私の意見では、アルゴリズムの大きな行列により、アルゴリズムの構造が理解できるようになります。結果を見たい場合は、コンソールと結果の文字列を出力すればOKです。

于 2015-11-25T13:37:45.807 に答える