[解決済み] numpyの配列に表示する?
質問
私は、2D
numpy
配列があります。その上にビューを作成し、最初の
k
行とすべての列を含むビューを作成する方法はありますか?
ポイントは、基礎となるデータをコピーしないことです(配列は非常に大きいので、部分的なコピーをすることは実行不可能です)。
どのように解決するのですか?
もちろん、通常と同じようにインデックスを作成してください。 例えば
y = x[:k, :]
これは、元の配列へのビューを返します。データはコピーされません。
y
に反映されます。
x
に反映され、逆もまた然りです。
編集してください。
私はよく>10GBのuint8の3D配列を扱うので、よく悩みます...。Numpyはいくつかの点に気をつければ、メモリ管理を非常に効率的に行うことができます。 ここでは、メモリ上に配列のコピーを作らないようにするためのヒントをいくつか紹介します。
使用方法
+=
,
-=
,
*=
などとすることで、配列のコピーを作らないようにします。例
x += 10
はその場で配列を変更しますが
x = x + 10
はその場で配列を変更しますが、
コピーを作成する場合は
x = x + 10
でコピーしたい場合は、以下の点に注意してください。
x = x + 10.0
が発生します。
x
は自動的に浮動小数点配列にアップキャストされます(まだアップキャストされていない場合)。 しかし
x += 10.0
では
x
が整数の配列の場合
10.0
は配列と同じ精度のint型にダウンキャストされます。
さらに、多くのnumpy関数は
out
パラメータを取るので、次のようなことができます。
np.abs(x, x)
の絶対値を取るように
x
をその場で取る。
2回目の編集として、以下は ビュー との比較です。 コピー をnumpyの配列と比較します。
pythonのリストとは異なり
y = x[:]
はコピーを返さず、ビューを返します。もしコピーを取りたいのであれば、(もちろん、使用するメモリ量が倍増します)
y = x.copy()
numpy配列のquot;fancy indexing"についてよく耳にすると思います。インデックスとしてリスト(または整数配列)を使用することは、"fancy indexing"です。これは非常に便利ですが、データをコピーしてしまいます。
この例として
y = x[[0, 1, 2], :]
はコピーを返しますが
y = x[:3,:]
はビューを返します。
のような本当におかしなインデックス付けでも
x[4:100:5, :-10:-1, None]
のような本当におかしなインデックスでも、quot;normal" インデックスであり、ビューを返すので、大きな配列であらゆる種類のスライシングトリックを使うことを恐れないでください。
x.astype(<dtype>)
はデータのコピーを新しい型として返します。
x.view(<dtype>)
はビューを返します。
ただし、これには注意が必要です...。これは非常に強力で便利ですが、基礎となるデータがどのようにメモリに格納されているかを理解する必要があります。 浮動小数点数の配列を持っていて、それをint型として表示する場合(またはその逆)、numpyはその基礎にある ビット をint型として解釈します。
例えば、これは
1.0
をリトルエンディアンのシステムで 64bit の float として使用すると
4607182418800017408
となり、64ビットintとして見た場合は
[ 0, 0, 0, 0, 0, 0, 240, 63]
の配列となります。 これは、大きな配列に対してある種のビット操作を行う必要がある場合に非常に有効ですが... メモリバッファがどのように解釈されるかを低レベルで制御することができます。
関連
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み] 2次元アレイにおけるピーク検出
-
[解決済み] pandas GroupByを使ってグループごとの統計情報(カウント、平均値など)を取得する?
-
[解決済み] 通常のPythonのリストと比較した場合、NumPyの利点は何ですか?
-
[解決済み] NumPyで空の配列/行列を作成する方法は?
-
[解決済み】pandasでカラムの種類を変更する
-
[解決済み】Pandas DataFrameのより多くの列を見るために出力表示を拡大する方法は?
-
[解決済み】Numpy - 配列に行を追加する
-
[解決済み】Numpy: 2次元配列からランダムな行のセットを取得する
-
[解決済み] NumPyの2次元配列のスライス、またはnxn配列(n>m)からmxmの部分行列を取り出すには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】numpyの配列を逆引きする最も効率的な方法
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Django filter queryset __in for *every* item in list
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例