二维数组中的Python Numpy索引

2024-09-28 21:00:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的老Codger和新手,在理解如何通过二维数组索引时遇到了一个问题,尽管我读了很多教程,但它们似乎都使用整数,所以可能我遗漏了一些东西。在

在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的等价物。怎样才能达到预期的效果?在


Tags: todebugfor教程整数数组nextvb
2条回答

一个简单的方法来得到你想要的矩阵是向量乘法。 在您的示例中,它将是:

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

所以

^{pr2}$

输出:

[[  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]]

最直接的翻译是

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]]

或者你可能想用

^{pr2}$

生产

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,:]

相关问题 更多 >