python多次元スライス

1362 ワード

昨日作ったプロジェクトでリストを多次元スライスする必要があり、簡単なことだと思っていたのに、多くのブログを調べてみました.最後にstackoverflowで答えを見つけたので、今の多くの人の分かち合いの態度は間違いないと言わざるを得ませんが、分かち合う前に少なくとも自分が分かち合う知識点を理解して、自分が半分理解していると、他人を誤解するだけです.
まず、この多次元スライスはnumpyを使用したndarrayタイプとpythonデフォルトのlistタイプの2種類に分けられます.それらの処理方法はまったく違います!
1. ndarray(numpy)
numpyはPythonを用いたデータ解析に不可欠なサードパーティライブラリであり,非常に多くの科学計算ツールがnumpyに基づいて開発されている.
ndarrayオブジェクトは、同じタイプの要素を格納するための多次元配列であり、numpyの基本オブジェクトの1つです.ndarrayの具体的な使用方法については説明しませんが、その中の多次元スライス処理だけについて説明します.
ndarrayはnumpyのarray関数をpythonのlist変換で得ることができる
import numpy as np

#   ndarray   ,   [x1:x2, y1:y2],     [x1,x2),   [y1,y2)。     ,     。
#         ,   [x,:],     :[:,y]
#         

list = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
list_ndarray = np.array(list)
list_t = list_ndarray[1:3,1:3]
print(list_t)

#     
# [[ 6  7]
#  [10 11]

2. list(python)
pythonでデフォルトのlistについて、ndarrayの処理方法を使用している場合は、おめでとうございます.次のエラーが発生します.
TypeError: list indices must be integers or slices, not tuple

リストには次のような処理があります.
import numpy as np

#   list   ,      ,       for  ,        ,      native   
# slice = [arr[i][y1:y2] for i in range(x1,x2)]
#         

list = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
list_t = [list[i][1:3] for i in range(1, 3)]
print(list_t)

#     
# [[6, 7], [10, 11]]