Saya ingin mengiris array NumPy nxn. Saya ingin mengekstraksi pemilihan acak baris dan kolom array itu (yaitu tanpa pola dalam jumlah baris / kolom), menjadikannya array, mxm baru. Untuk contoh ini, katakanlah arraynya 4x4 dan saya ingin mengekstrak array 2x2 darinya.
Inilah susunan kami:
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]]
Baris dan kolom yang akan dihapus sama. Kasus termudah adalah ketika saya ingin mengekstrak submatrix 2x2 yang ada di awal atau di akhir, yaitu:
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]])
Tetapi bagaimana jika saya harus menghapus campuran baris / kolom? Bagaimana jika saya harus menghapus baris / baris pertama dan ketiga, sehingga mengekstraksi submatrix [[5,7],[13,15]]
? Mungkin ada komposisi baris / garis. Saya membaca di suatu tempat bahwa saya hanya perlu mengindeks array saya menggunakan array / daftar indeks untuk baris dan kolom, tetapi sepertinya itu tidak berfungsi:
In [35]: x[[1,3],[1,3]]
Out[35]: array([ 5, 15])
Saya menemukan satu cara, yaitu:
In [61]: x[[1,3]][:,[1,3]]
Out[61]:
array([[ 5, 7],
[13, 15]])
Masalah pertama dengan ini adalah bahwa itu hampir tidak dapat dibaca, meskipun saya bisa hidup dengan itu. Jika seseorang memiliki solusi yang lebih baik, saya pasti ingin mendengarnya.
Hal lain yang saya baca di forum bahwa pengindeksan array dengan array memaksa NumPy untuk membuat salinan array yang diinginkan, sehingga ketika memperlakukan dengan array besar ini bisa menjadi masalah. Mengapa begitu / bagaimana mekanisme ini bekerja?