我是一个老Codger和新的Python,有一个问题,理解如何通过一个2维数组索引,即使我读了很多教程,他们似乎都使用整数,所以也许我错过了一些东西。
在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的等价物。如何才能达到预期的效果?
发布于 2016-05-20 02:58:12
最直译的是
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,:]发布于 2016-05-20 03:34:45
获得你想要的矩阵的一种干净的方法是向量乘法。在您的示例中,它将是:
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]]https://stackoverflow.com/questions/37330843
复制相似问题