問題タブ [recarray]
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.
python - 構造化配列と再配列の出力方法を変更する
Numpy は大きなarrays
をまとめたもので、インタラクティブなセッションで作業するときに便利です。残念ながら、構造化されており、デフォルトarrays
でrecarrays
はうまく要約されていません。これを変更する方法はありますか?
デフォルトでは、array
アイテムが 1000 個以下の場合、すべてが表示されます。これ以上の項目がある場合array
はまとめて表示されます。で設定できますnp.set_printoptions(threshold=<number of items to trigger summarization>, edgeitems=<number of items to show in summary>)
。これは、次のような標準のデータ型では問題なく機能します。
結果は
ただし、より複雑なデータ型が使用される場合、要約はあまり役に立ちません。
配列は要約されていますが、サブデータ型は要約されていません。arrays
これは、複雑なデータ型を大量に使用する場合に問題になります。たとえばarray
np.zeros(1000, dtype=[('a', float, 3000), ('b', float, 10000)])
、ipython インスタンスがハングアップします。
np.array
タイプを直接使用するのではなく、サブクラス化して custom を作成することで、いくつかの回避策があります__repr__
。これは大規模なプロジェクトでは機能しますが、根本的な問題は解決されず、インタラクティブな Python セッションでデータをすばやく探索するには不便です。また、非常に長いコンソール出力を切り捨てるカスタム フィルターをエディターに実装しました。これはちょっとしたハックで、別の場所で Python セッションを開始するときには役に立ちません。
私が知らないnumpy設定、またはこれを修正できるpythonまたはipython設定はありますか?
python - レコード配列の「ベース」を見つける方法
base
レコード配列のはどのように決定されますか? ドキュメントは通常の配列と同じ動作を説明しているようですが、それはそうではありません。これは単純な配列と、そこから作成されたレコード配列です。
レコード配列のベースが正しく設定されている
はbase
、通常の配列のフィールド アクセスに対して正しく設定されます。
ただし、レコード配列の場合、ベースが何であるかを判断できません。None
私が試したのは、通常の配列、レコード配列、またはその他のものではありません。
スライスのインデックス作成で期待どおりに動作します
そして、それは間違いなくまだ同じメモリを指しています
では、レコード配列の実際のベースを見つけるにはどうすればよいでしょうか。
select - FITS_rec とデータの選択: 「真の」フィルタリングの代わりにマスキング?
おそらくアシュリーの投稿と重複しています(ただし、まだコメントできません;))。
最初のFITS_rec ( numpyのrecarrayに基づく)のサブセレクション/サンプルに列を追加しようとすると、同じ問題が発生します。すべての行が再表示されます(そして、この新しい列の入力は尊重されていないようです...)。Vlas Sokolov によって提案された" hdu_sliced._get_raw_data() " は、私にとって非常にうまく機能しているソリューションですが、私は疑問に思っていました:
1) イグアナノートが提案する「より良い方法」とは? 私は確かに誰かが私のためにそれをグーグルする必要があります。初心者の私は行き詰まりを感じています:$ ( FITS_recにとどまる必要があります)。
2) それは予想される動作ですか? つまり、元の配列のコピーである「マスクされた配列」で作業したいのでしょうか? 私が最も心配しているのは、新しい計算列の値の「崩壊」です。下記参照:
FITS_rec([('NGC1001', 11.1), ('NGC1002', 12.3), ('NGC1003', 15.2)], dtype=(numpy.record, [('target', 'S20'), ('V_mag' 、 '
FITS_rec([('NGC1002', 12.3), ('NGC1003', 15.2)], dtype=(numpy.record, [('target', 'S20'), ('V_mag', '
ここまでは順調ですね...
FITS_rec([('NGC1001', 11.1, 13.30000019), ('NGC1002', 12.3, 16.20000076), ('NGC1003', 15.2, 0.)], dtype=(numpy.record, [('ターゲット', 'S20 '), ('V_mag', '
...AND ... NGC1002 と NGC1003 の新しい列の値は正しいですが、それぞれ NGC1001 と NGC1002 の行にあります... :|
どんな啓発も歓迎されます:)
python - ndarray は recarray アクセスより高速ですか?
再配列データを ndarray にコピーし、いくつかの計算を行い、更新された値で ndarray を返すことができました。
次に、 のappend_fields()
機能を発見numpy.lib.recfunctions
し、元の再配列に 2 つのフィールドを単純に追加して、計算された値を保持する方がはるかにスマートであると考えました。
これを行ったとき、操作がはるかに遅いことがわかりました。時間を計る必要はありませんでした。ndarray ベースのプロセスは、rearray では 1 分以上かかるのに比べて数秒かかり、テスト配列は小さく、<10,000 行です。
これは典型的なものですか?ndarray アクセスは recarray よりもはるかに高速ですか? フィールド名によるアクセスによるパフォーマンスの低下を予想していましたが、それほどではありませんでした。
python - バイトまたは文字列からの Numpy 再配列
numpy 再配列をバイトに変換する必要があるプロセスがあり、その後、バイトから再配列を再構築します。
ただし、バイトから配列を回復する方法がわかりません。
どうすればそれができるか知っている人はいますか?
コード例:
注: 実際には numpy 再キャリーを使用する必要はありません。pandas データフレームをバイト オブジェクトに変換し、それを回復できるようにする構造だけです。