2011-01-24 23 views
4

次のような賢明な方法があるかどうか疑問に思うだけです。N次元の配列 - Python/Numpy

私は次のない最初の行を得るために3×3のグリッド

grid = [[1,2,3], 
     [4,5,6], 
     [7,8,9]] 

を表すN次元の配列を有する:

grid[0][0:3] 
>> [1,2,3] 

を得るために最初の列私はこれのような何かをしたいと思います(それは不可能ですが):

grid[0:3][0] 
>> [1,4,7] 

NumPyはこれに似たものを偶然サポートしていますか?


答えて

10

はい、そこにそのようなことがnumpyのである:

>>> zip(*grid)[0] 
(1, 4, 7) 

ちょうどそれ以上のもの、そして:あなたがリストのリストとして表現行列を転置するzipを使用することができます

import numpy as np 

grid = np.array([[1, 2, 3], 
       [4, 5, 6], 
       [7, 8, 9]]) 

grid[0,:] 
# array([1, 2, 3]) 

grid[:,0] 
# array([1, 4, 7]) 
1

あなたが使用することができますPythonで列を取得するには:

[row[0] for row in grid] 
>>> [1,4,7] 

あなたは

grid[0][:] 

だけコピー[:]ため、アレイ全体、追加する必要はありませんとして、行を取得するためにコードを書き換えることができインデックス。

しかし、達成したいことに応じて、この実装の内容を隠すために、小さな行列クラスを書くほうがよいと言いたいと思います。

+3

独自のマトリックスクラスを作成しないでください。すでに提供されている良いマトリックスクラスを使用してください。 – eumiro

+0

@eumiro:あなたは絶対に正しいです。特定のクラスを覚えていますか? –

+0

ナンシー。私のポストを参照してください。 – eumiro

2

私はナンシーを使うだろう。