2013-06-24 39 views
25

私はPythonとnumpyの新機能です。私は1次元をスライスする方法を見つけました:arr[atart:end]、そして配列の要素にアクセスしてください:el = arr[row][col]Python:多次元配列をスライスする

slice = arr[0:2][0:2](ここではarrはnumpy配列です)を試しても、最初の2つの行と列は表示されませんが、最初の2行が繰り返されます。私は何をしましたか、そして別の次元に沿ってどのようにスライスしますか?

+0

どのデータ型が 'arr'ですか?それはリストのリストですか? – mgilson

+0

@mgilson質問のタイプを – SlightlyCuban

答えて

33

あなたがnumpyを使用している場合、これは簡単です:

slice = arr[:2,:2] 

か、0年代、

slice = arr[0:2,0:2] 

をしたい場合は、同じ結果を得るでしょう。

* sliceは、実際には内蔵型の名前です。一般的に、私はあなたのオブジェクトに異なる "名前"を与えることをお勧めします。


別の方法として、あなたはリストのリストで作業している場合は、*:

slice = [arr[i][0:2] for i in range(0,2)] 

(ここで0は不要であることに注意してください:。[arr[i][:2] for i in range(2)]も動作します)。

私がここで行ったことは、一度に1行ずつ()を取ることです。その列から必要な列をスライスし、それを私が作成しているリストに追加します。

あなたは素朴に試してみてください:arr[0:2]あなたは再びarr[0:2][0:2]をスライスすると、最初の2行をスライスするだけです。

*これは実際には低音のアレイでも機能しますが、上記の「ネイティブ」ソリューションと比較して遅くなります。

+0

に更新しました。したがって、 'arr [0:2] [0:2]'は実際に 'arr [row] [col]'と比較しますか? – SlightlyCuban

+0

@SlightlyCuban - 最新の回答をご覧ください。 – mgilson

+0

@mgilson私はこれをうんざりし、幾分奇妙な結果を得ました。私は 'a = [[1,2,3]、[4,5,6]、[7,8,9]]' 'a [0] [:] = [1,2,3]'不思議なことに 'a [:] [0]'はまだ '[1,2,3]'です。私はこれが[1,4,7]であるべきだと言います。ここで何が間違っているのか教えていただければ幸いです。 –