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]])
しかし、行/列の別の混合を削除する必要がある場合はどうなりますか?最初と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]])
これの最初の問題は、私はそれと一緒に暮らすことができますが、ほとんど読むことができないということです。誰かがより良い解決策を持っているなら、私は確かにそれを聞きたいです。
もう1つは、配列で配列にインデックスを付けるとNumPyが目的の配列のコピーを作成するように強制されることをフォーラムで読んだことです。そのため、大きな配列を扱う場合、これが問題になる可能性があります。なぜそうなのか/このメカニズムはどのように機能するのですか?