2011-08-11 22 views
6

私はPythonの初心者です。配列の要素を操作する方法を理解したいと思います。 私は、たとえばしている場合:2D配列の要素にアクセスする方法は?

a= (a11 a12 a13) and b = (b11 b12 b13) 
    a21 a22 a23    b21 b22 b23 

私は例えばとしてのpythonでそれらを定義しています

a=[[1,1],[2,1],[3,1]] 
b=[[1,2],[2,2],[3,2]] 

私はa[1][1]を参照することができないことを見たが、a[1]に私に[2,1]の結果を与えます。 これらの配列の2番目の行にどうやってアクセスするのか分かりません。それはa21, a22, a23, b21, b22, b23でしょうか? c1 = a21*b21, c2 = a22*b22などと掛け合わせるにはどうすればいいですか?

+1

今すぐnumpyを使用するのが最善です! –

+2

'a [1] [1]'を評価しようとしたときにエラーが発生しましたか?それは1であることが判明しました。あなたは何を見つけましたか? –

答えて

6

あなたは

a=[[1,1],[2,1],[3,1]] 
b=[[1,2],[2,2],[3,2]] 

をお持ちの場合はその後

a[1][1] 

が正常に動作します。 2列目、2列目を指しています。

私はあなたが間違っていたか分かりません。あなただけの任意の数の行のために動作します

c = [a[2][i] * b[2][i] for i in range(len(a[2]))] 

を行うことができ、第3列のセルを乗算する

編集:最初の数字は列、2番目の数字は現在のレイアウトです。それらは両方ともゼロから番号が付けられています。あなたが順序を切り替えたい場合は、

a = zip(*a) 

を行うこともできますし、そのように作成することができます:予想通り

a=[[1, 2, 3], [1, 1, 1]] 
+0

これは 'a [1]'には2つの項目しかないからです。配列の番号は0から始まります。 'a [1]'は列1なので、 'a [1] [0]'と 'a [1] [1]'しかありません。 – agf

+0

うわー!私は速い答えに感心しています。それは私の大きな間違いでした。なぜなら、私はこれを、私が持っていたより大きな問題から、このケースに単純化したからです。トレースバック(最近の最後のコール): ファイル ""のエラーが表示されていますが、実際には[0] [0]、[1] [1] 、1行目、 a [1] [2]IndexError:リストの索引が範囲外です...これは、配列がPythonと正確には互換性がないという読者との組み合わせで、 。みんなありがとう! – caran

0

はここで働いているようだ:

>>> a=[[1,1],[2,1],[3,1]] 
>>> a 
[[1, 1], [2, 1], [3, 1]] 
>>> a[1] 
[2, 1] 
>>> a[1][0] 
2 
>>> a[1][1] 
1 
0

a[1][1]は、作業を行います。最初の行の最初の要素としてa11を意味しますか?原因はa [0] [0]です。

3

2次元配列で多くの計算を行う場合は、nest listではなくNumPy配列を使用する必要があります。あなたの質問のための

は、あなたが使用することができます:zipファイルを(* a)は、それをトランスポーズする:あなたの配列が持っているん

In [55]: a=[[1,1],[2,1],[3,1]] 
In [56]: zip(*a) 
Out[56]: [(1, 2, 3), (1, 1, 1)] 
In [57]: zip(*a)[0] 
Out[57]: (1, 2, 3) 
0

ルック慎重にどのように多くのブラケット。

>>>approx 
array([[[1192, 391]], 
     [[1191, 409]], 
     [[1209, 438]], 
     [[1191, 409]]]) 

をし、これが

>>> approx[1,1] 
IndexError: index 1 is out of bounds for axis 1 with size 1 

を動作しませんでしたこれは、ブラケットを開くことができます:関数は、余分なブラケットとの答えを返したとき、私はそのように、例を満たさ

>>> approx[:,0] 
array([[1192, 391], 
     [1191, 409], 
     [1209, 438], 
     [1191, 409]]) 

今では

>>> approx[:,0][1,1] 
409 
を使用することができます。
関連する問題