[解決済み] NumPyの2次元配列のスライス、またはnxn配列(n>m)からmxmの部分行列を取り出すには?
質問
NumPy の nxn 配列をスライスしたい。私は 任意 その配列の m 個の行と列を選択して(つまり、行数/列数にパターンがない状態で)、新しい mxm 配列を作成します。この例では、配列が 4x4 で、そこから 2x2 の配列を取り出すとします。
これがその配列です。
from numpy import *
x = range(16)
x = reshape(x,(4,4))
print x
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
削除する行と列は同じです。最も簡単なケースは、先頭または末尾にある2x2部分行列を抽出したい場合、つまり :
In [33]: x[0:2,0:2]
Out[33]:
array([[0, 1],
[4, 5]])
In [34]: x[2:,2:]
Out[34]:
array([[10, 11],
[14, 15]])
しかし、別の行/列の混合を削除する必要がある場合はどうでしょうか?1行目と3行目を削除し,サブマトリクスを抽出する必要がある場合はどうでしょうか?
[[5,7],[13,15]]
? 行・列の構成は自由です。行と列の両方のインデックスを持つ配列/リストを使用して配列のインデックスを作成する必要があるとどこかで読みましたが、それはうまくいかないようです。
In [35]: x[[1,3],[1,3]]
Out[35]: array([ 5, 15])
という、一つの方法を見つけました。
In [61]: x[[1,3]][:,[1,3]]
Out[61]:
array([[ 5, 7],
[13, 15]])
これの最初の問題は、ほとんど読み取れないということです。もし誰かがもっと良い解決策を持っているなら、ぜひそれを聞きたいです。
もうひとつは、私が読んだ あるフォーラムで 配列で配列のインデックスを作成すると、NumPy は目的の配列のコピーを作成することになるため、大きな配列を扱う場合には問題になる可能性があるということです。なぜそうなのでしょうか、また、このメカニズムはどのように機能するのでしょうか?
解決方法は?
スヴェンさんのおっしゃるとおりです。
x[[[0],[2]],[1,3]]
は 1 と 3 の列と一致する 0 と 2 の行を返します。
x[[0,2],[1,3]]
は、値 x[0,1] と x[2,3] を配列で返します。
最初にあげたようなことをするのに便利な関数があります。
numpy.ix_
. で最初の例と同じことができます。
x[numpy.ix_([0,2],[1,3])]
. これによって、余分な括弧を入力する手間を省くことができます。
関連
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み] NumPyの配列を切り詰めずに、完全に表示するにはどうしたらよいですか?
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
-
[解決済み] インデックスを指定してリストから要素を削除する方法
-
[解決済み] NumPy の配列を csv ファイルにダンプする
-
[解決済み] NumPyで空の配列/行列を作成する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
PicgoのイメージベッドツールをPythonで実装する
-
Python百行で韓服サークルの画像クロールを実現する
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Pythonショートビデオクローラーチュートリアル
-
Python LeNetネットワークの説明とpytorchでの実装
-
Pythonの@decoratorsについてまとめてみました。
-
Python Pillow Image.save jpg画像圧縮問題
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。