私は次のような配列を持っています:
a = array([[1,2,3],[3,4,5],[4,5,6]])
「a」の最初の2列しかないこれから1x2配列をスライスする最も効率的な方法は何ですか?
つまり.
array([[2,3],[4,5],[5,6]]) in this case.
2次元のnumpy配列は、(a[i,j]
ではなく)a[i][j]
を使用してインデックス付けされますが、python)の通常の行列と同じスライス表記をnumpy配列と行列で使用できます。 =(それらを単一の[]
に入れるだけです):
>>> from numpy import array >>> a = array([[1,2,3]、[3,4,5]、[4,5,6]]) >>> a [:、1:] array([[2、3]、 [4、5]、 [5、6] ])
これはあなたが探しているものですか?
a[:,1:]
documentation を引用すると、基本的なスライス構文はi:j:k
です。ここで、i
は開始インデックス、j
は終了インデックス、k
はステップです(k > 0
の場合)。
これで、i
が指定されていない場合、k > 0
の場合はデフォルトで0になります。それ以外の場合、i
はn - 1
に対してデフォルトでk < 0
になります(ここで、n
は配列の長さです)。
j
が指定されていない場合、デフォルトでn
(配列の長さ)になります。
これは1次元配列用です。
これで、2次元配列は別の獣になりました。そのためのスライス構文はa[rowrange, columnrange]
です。
したがって、すべての行が必要で、最後の2列だけが必要な場合は、次のようにします。
a[0:3, 1:3]
ここで、「[0:3]
」は0から3までのすべての行を意味し、「[1:3]
」は列1から列3までのすべての列を意味します。
不思議に思うかもしれませんが、列が3つしかなく、番号付けは1から始まりますが、3列を返す必要がありますか?つまり、列1、列2、列3
これは、この構文のトリッキーな部分です。最初の列は実際には列0です。したがって、「[1:3]
」と言うときは、実際には列1と列2を教えてくださいと言っています。どちらが最後の2列です。 (実際には列3はありません。)
これで、行列の長さがわからない場合、またはすべての行が必要な場合は、その部分を空のままにしておくことができます。つまり.
a[:, 1:3]
同じことが列にも当てはまります。つまり、最初の行だけを除くすべての列を言いたい場合は、次のように記述します。
a[0:1,:]
さて、上記の答えa[:,1:]
がどのように機能するかは、列に「[1:]
」と言うと、列0を除くすべてを、すべての列の終わりまで与えることを意味するためです。つまり、空は「最後まで」を意味します。
ここまでで、コンマの両側にあるものはすべて、前述した1次元の場合のサブセットであることを理解する必要があります。つまり、ステップサイズを使用して行を指定する場合は、次のように記述できます。
a[::2,1]
あなたの場合、どちらが返されますか
array([[2, 3],
[5, 6]])
つまり、a[::2,1]
は次のように説明します。一番上から始めて1行おきに、2番目の列だけを表示します。
これは私が理解するのに少し時間がかかりました。誰かに役立つ場合に備えて、ここに貼り付けます。