問題タブ [mat-file]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - MATLAB で MAT ファイルを読み込まずに内容を確認するにはどうすればよいですか?
MAT ファイルに大きな構造があります。内容が非常に大きく、メモリ使用量を最小限に抑えたいため、MAT ファイルをロードせずに特定のフィールドが構造体に存在するかどうかを確認したいと考えています。
これは可能ですか、それとも次の例のように最初にロードする必要がありますか?:
matlab - .matファイルからの変数の削除
ここの誰かがmatlabファイルから変数を削除する方法を知っていますか?メソッドを使用して既存のmatlabファイルに変数を追加できることは知っていますがsave -append
、ファイルから変数を削除する方法に関するドキュメントはありません。
誰かが「それを保存するだけ」と言う前に、それはメモリの問題を軽減するために中間処理ステップをディスクに保存しているためです。最終的には、分析ルーチンごとにほぼ10GBの中間データがあります。ありがとう!
matlab - MATLAB または Unix シェルで .mat ファイルを表示するにはどうすればよいですか?
ファイルの内容を表示したいだけです。それは私がアクセスできるディレクトリにあります。その内容を表示する Unix コマンドはありますか? MATLAB に読み込むこともできます。同様の MATLAB コマンドはありますか?
ありがとう
python - Scipy.io.loadmatを使用して、Matlabマットファイルの文字列のセル配列をPythonリストまたはタプルにロードする方法
私はPythonが初めてのMatlabユーザーです。Matlab の文字列のセル配列を Mat ファイルに書き込み、Python (おそらく scipy.io.loadmat) を使用してこの Mat ファイルを同様のタイプ (文字列のリストまたは文字列のタプルなど) にロードしたいと思います。しかし、ロードマットは物事を配列に読み込み、それをリストに変換する方法がわかりません。「tolist」関数を試してみましたが、期待どおりに動作しませんでした (Python 配列または numpy 配列の理解が不十分です)。例えば:
Matlab コード:
Python コード:
次に、変数 array_of_strings は次のとおりです。
この array_of_strings を Python のリストまたはタプルに変換して次のようにする方法がわかりません
Python や numpy の配列オブジェクトに詳しくありません。あなたの助けは非常に高く評価されます。
file - MATLAB: "-v7.3" (HDF5) .mat ファイルへのいくつかの変数の保存は、"-append" フラグを使用すると高速になるようです。どうして?
注: この質問は、2011 年に古い MATLAB バージョン (R2009a) で観察された問題を扱っています。以下の 2016 年 7 月からの更新によると、MATLAB の問題/バグはもはや存在しないようです (R2016a でテスト済み。質問の最後までスクロールして更新を確認してください)。
私は MATLAB R2009b を使用しており、.zip ファイルのより大きなセットの内容を v7.3 mat ファイル (基礎となる HDF5 データモデルを使用) に変換する、より大きなスクリプトを作成する必要があります。読み取りOKです。問題は保存にあります。そして、実際には問題はありません。私のファイルは、 saveコマンドを使用してうまく保存されます。
私の質問はもっと意味があります: MATLAB で次の驚くべき (私にとって) 動作が見られるのはなぜですか?
一般的に私の問題を見てみましょう。この現在のテスト シナリオでは、1 つの出力 (-v7.3 mat ファイル) を生成します。この .mat ファイルには、個別の変数として40 個のブロックが含まれます。各変数には、1 から 40 までの「block_NNN」という名前が付けられ、フィールドframesおよびblockNoを持つ構造体が含まれます。フィールドフレームには、uint8 画像データの 480x240x65 シーケンスが含まれます (ここでは、 randi を使用して生成されたランダム データのみ)。フィールドblockNoにはブロック番号が含まれます。
注:実際のスクリプト (まだ完成していません) では、上記を合計 370 回実行し、合計 108 GB の生データを変換します。ということで、以下が気になります。
とにかく、最初にいくつかの一般変数を定義します。
次に、実際の生データと同じ形状とサイズを持つダミー コードを生成します。
これで、すべてのランダム テスト データが struct stu_data2diskに含まれるようになりました。ここで、2 つの可能な方法のいずれかを使用してデータを保存したいと思います。
最初に簡単なものを試してみましょう:
ファイルは問題なく書き込まれます (286MB)。出力は次のとおりです。
OK - それから、40 ブロックにわたって保存手順を実行したいことを思い出しました。したがって、上記の代わりに、ブロックをループして順番に追加します。
また、ファイルはうまく保存されます (286MB)。出力は次のとおりです。
興味深いことに、append-method ははるかに高速ですか? 私の質問はなぜですか?
からの出力dir converted*.mat
:
ファイルのサイズが同じではありません。そして、Windows 7 でfcを使用したテストでは、多くのバイナリの違いが明らかになりました。おそらく、データが少しシフトされたので、何もわかりません。
誰かがここで何が起こっているのか知っていますか? 追加されたファイルは、おそらくより最適化されたデータ構造を使用していますか? それとも、Windows がファイルをキャッシュして、ファイルへのアクセスを大幅に高速化したのでしょうか。
2つのファイルからも試し読みをしてみました。ここに数値を提示しなければ、追加されたバージョンは少し高速でした (ただし、長期的には何かを意味する可能性があります)。
[編集] : フォーマット フラグを使用せずに試してみたところ (私のシステムではデフォルトで -v7 になっています)、あまり違いはありません:
[編集] : 上記の間違いを修正しました。以前、統計は -v6 のものであると述べましたが、私は間違っていました。フォーマット フラグを削除したばかりで、デフォルトが -v6 であると想定していましたが、実際には -v7 です。
Andrew の優れたフレームワークを使用して、システム上のすべての形式の新しいテスト統計を作成しました (すべての形式は、ファイルから読み取られた同じランダム テスト データ用です)。
そして、ファイルのサイズ:
したがって、書き込みには -v6 が最速のようです。また、ファイルサイズに大きな違いはありません。私の知る限り、HDF5 にはいくつかの基本的な inflate メソッドが組み込まれています。
うーん、おそらく基礎となる HDF5 書き込み関数の最適化ですか?
現在、基礎となるいくつかの基本的な HDF5 書き込み関数は、データセットを HDF5 ファイルに追加するために最適化されていると思います (これは、新しい変数を -7.3 ファイルに追加するときに発生します)。HDF5がまさにこの方法で最適化されるべきであるとどこかで読んだと思います...確かではありませんが。
その他の注意事項:
以下のアンドリューの回答に見られるように、動作は非常に体系的です。また、これらを関数のローカル スコープで実行するか、m-script の「グローバル」で実行するかについても非常に重要なようです。私の最初の結果は、ファイルが現在のディレクトリに書き込まれた m スクリプトからのものでした。m スクリプトで -7.3 の 1 秒の書き込みしか再現できません。関数呼び出しにより、明らかにオーバーヘッドが追加されます。
2016 年 7 月の更新:
私はこれを再び見つけ、現時点で利用可能な最新の MATLAB でテストできると考えました。Windows 7 x64 上の MATLAB R2016a では、問題が修正されたようです。
これは、以下の受け入れられた回答の Andrew Janke のreproMatfileAppendSpeedup
関数でテストされました (形式 7.3 で 5 パス)。現在-append
は、1 回の保存が同じように、または遅くなりました。おそらく、R2009a で使用されていた HDF5 ドライバーの初期のビルドに問題があったのでしょう。
matlab - MATLAB: .mat バージョン間の違い
公式ドキュメントには次のように記載されています。
. しかし、上記の表に記載されている以外にも重要な違いがあることに気付きました。
たとえば、 MATLAB で176 MBのメモリを占有する約 6,000 要素の cell 配列を保存すると、 -v7または-v7.3のどちらを使用するかに応じて、次の結果が得られます。
- -v7の場合: ファイル サイズ = 15 MB、保存と読み込みが高速です。
- -v7.3の場合: ファイル サイズ = 400 MBで、保存と読み込みが非常に 遅い(おそらくファイル サイズが大きいため)。
他の誰かがこれらの違いに気づいたことがありますか?
更新 1 : 返信が指摘するように、-v7.3は HDF5 に依存しており、Mathworks によれば、「この形式にはかなりのストレージ オーバーヘッドがあります」 。代わりに HDF5 の実装と処理。
更新 2 : @Andrew Janke は、この非常に役立つ PDF (Web では HTML 形式で利用できないようです) を教えてくれます。詳細については、@Amro が提供する回答のコメントを参照してください。
これはすべて、次の質問につながります。両方の長所を組み合わせた代替手段はありますか(たとえば、 -v7 の効率と-v7.3の非常に大きなファイルを処理する機能) ?
matlab - ニューラルネットワークを使用して分類するためにシフト特徴ベクトルを保存する方法
SIFT機能のMatlab実装は、http: //www.cs.ubc.ca/~lowe/keypoints/から見つかりました。スタックオーバーフローの助けを借りて。機能を.matファイルに保存したい。特徴は、丸み、色、バイナリ画像の白ピクセル数の数、およびふるい分けの特徴です。sift特徴については、上記のコードで記述子を取得しました{[siftImage、descriptors、locs] = sift(filteredImg)}したがって、私の特徴ベクトルは、FeaturesTest = [roundness、nWhite、color、descriptors、outputs];になります。save('features.mat'、'Features');を使用してこれを.matファイルに保存する場合。エラーが発生します。
エラーはこんな感じです。
??? ==>horzcatCAT引数のディメンションの使用中にエラーが発生しました。336 FeaturesTest = [roundness、nWhite、color、descriptors、outputs]での==>user_interface>extract_featuresのエラー;
私が理解できるように、問題は記述子の特徴ベクトルのサイズだと思います。<14x128ダブル>です。14行はこの機能用ですが、他の行は.matファイルに1行しかありません。この特徴ベクトルを他の特徴とともに.matファイルに保存するにはどうすればよいですか?
返事を待っています。前もって感謝します。
matlab - メモリからmatlab MATファイルをロードする方法は?
Matlab シェルに読み込まれたマット ファイルのバイトの配列があるとします。このデータを解析する 1 つの方法は、ディスクに書き込み、Matlab ロード関数を使用することです。(Windows 上で) ハード ドライブに書き込まずにそれを行う方法はありますか?
UNIX ではデータを名前付きパイプに書き込んでそこからロードできるかもしれないことは知っていますが、Windows ではうまくいかないと思います。
私が考えることができる唯一の解決策は、Ram Disk を使用することです。他のアイデアを聞いてうれしいです。
python - Scipy.io.loadmatを使用してロードされた.matファイルから配列の内容にアクセスします--python
更新:これは要約すると長い質問ですが、誰かがnumpy配列クラスを私に説明できますか?私は以下の自分の質問に答えました。
私は、matlabからmysqlデータベースにデータをインポートするプロジェクトに取り組んでいます。このデータベースのコンテンツは、djangoWebサイトから入手できます。Scipy.io.loadmatを使用して、matlabからPythonで使用できる形式に情報を取得し、djangoapiを使用してデータベースにデータを入力できるようにします。
私の問題は、scipy.io.loadmatによってインポートされたデータを処理できないことです。いくつかのネストされた配列の形式でロードされ、変数名の一部が失われているようです。
トライアル用に作成したテスト構造のmatlabコードは次のとおりです。
この構造をPython辞書として簡単に視覚化できるので、これはそれほど複雑な演習ではないようです。
これが私がファイルを読み取るために使用したPythonコードです(最終的には複数のファイルを読み取りたいです):
これは、loadmatから得られた辞書です。
データはすべてそこにありますが、これらのクラスオブジェクトにアクセスする方法がわかりません。コンテンツをループして処理できるようにしたいのですが、複数のセンサー、次にセンサーごとに複数のチャネルなどを処理できます。
このデータ構造を単純化するのに役立つ説明や、これを簡単にするための提案された変更をいただければ幸いです。
ここでのニックの提案に基づいた更新は、repr(matfile)とdir(matfile)です。
明らかに、私はオブジェクトとクラスについて少し学ぶ必要があります。配列のビットをプルして変数に入れるにはどうすればよいですか。例えば:
python - scipy.io.loadmatを使用して、.matMatlabファイルからPythonで辞書キーを同じ値の変数名に変換します
scipy.io.loadmatを使用して.matファイルからロードされた基本的な辞書temp={'key':array([1,2])}を取得しようとしています。loadmat()によって返されたPythonディクショナリファイルのキーを、キーを表すのと同じ値を持つ変数名に変換します。
したがって、たとえば:
になって
temp.keys()でキーを取得する方法を知っています。次に、アイテムを取得するのは簡単ですが、temp.keys()内の文字列のリストを文字列ではなく変数名に強制するにはどうすればよいですか。
私はこれが理にかなっていることを願っていますが、これはおそらく本当に簡単です私はそれを行う方法を考えることができません。
乾杯