我和老Codger以及Python的新手并且在理解如何通过二维数组进行索引时遇到问题,即使我已阅读了许多教程,他们似乎都使用整数,所以也许我错过了一些东西。
在VB中我可以写
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
我找不到Python的等价物。我怎样才能达到预期的效果?
答案 0 :(得分: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]]
或者您可能想要使用
mymatrix[i,j]=(i+1)*(j+1)
生产
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]])
但是在numpy
中有更快,更好的方法。
将行向量乘以第一列:
np.arange(1,11)[:,None]*np.arange(1,11)[None,:]
答案 1 :(得分:0)
获得所需矩阵的简洁方法是向量乘法。 在您的示例中,它将是:
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]]