2016-05-19 12 views
0

私は古くからPythonを使っていて、2次元配列を使ってインデックスを作成する方法を理解していません。多くのチュートリアルを読んでいても、何かが欠けている。2次元配列のPython Numpy Indexing

VBで私はPythonのための同等のものを見つけることができません

Sub testindex() 
Dim mymatrix(10, 10) 
For i = 1 To 10 
For j = 1 To 10 
mymatrix(i, j) = i * j 
Debug.Print mymatrix(i, j) & " ,"; 
Next j 
Next i 
End Sub 

書くことができます。どのようにして目的の結果を達成できますか?

+0

あなたは何を試してみましたか?前にPythonを書いたことはありますか?基本的なpythonを超えて知る必要があるのは、 '(i、j)'がnumpyでは '[i、j]'になり、 'Dim mymatrix(10,10)'は 'mymatrix = np.empty((10、 10)) ' – Eric

答えて

0

ほとんど直訳は

mymatrix=np.zeros((10,10),int) 

for i in range(10): 
    for j in range(10): 
     mymatrix[i,j]=i*j   

In [637]: print(mymatrix) 
[[ 0 0 0 0 0 0 0 0 0 0] 
[ 0 1 2 3 4 5 6 7 8 9] 
[ 0 2 4 6 8 10 12 14 16 18] 
... 
[ 0 8 16 24 32 40 48 56 64 72] 
[ 0 9 18 27 36 45 54 63 72 81]] 

それとも、

array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 
     [ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20], 
     ... 
     [ 9, 18, 27, 36, 45, 54, 63, 72, 81, 90], 
     [ 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]]) 

を生成するために

mymatrix[i,j]=(i+1)*(j+1) 

を使用することもできます。しかしnumpyでそれを行うのより速く、より良い方法があるあります。ベクトル乗算になり、ご希望の行列を取得するための

np.arange(1,11)[:,None]*np.arange(1,11)[None,:] 
+0

今私には意味のある返信に感謝します。私は角括弧が重要ではなかった。このタイプのエラーは、自分で学習するときに発生します。 私はそれを試して、それは動作します - エッピー! Pythonのprintステートメントにエラーを生成する余分な丸括弧もありました。 私はRasberryPiでウィンドウのブラインドの開閉を自動化するプロジェクトに進むことができます。ハードウェアは完成し、テストされます。再度、感謝します。 – pd2

0

きれいな方法:

一つは、行ベクトル回コラム1を乗算します。 あなたの例では、次のようになります。

import numpy as np 

a = np.arange(1, 11) # create range [1, 10] (with shape (10,) 
b = np.expand_dims(a, 2) # ensure you have shape (10, 1) - a proper vector 
c = b*b.T 

ので

print(c) 

出力:

[[ 1 2 3 4 5 6 7 8 9 10] 
[ 2 4 6 8 10 12 14 16 18 20] 
[ 3 6 9 12 15 18 21 24 27 30] 
[ 4 8 12 16 20 24 28 32 36 40] 
[ 5 10 15 20 25 30 35 40 45 50] 
[ 6 12 18 24 30 36 42 48 54 60] 
[ 7 14 21 28 35 42 49 56 63 70] 
[ 8 16 24 32 40 48 56 64 72 80] 
[ 9 18 27 36 45 54 63 72 81 90] 
[ 10 20 30 40 50 60 70 80 90 100]]