繁体   English   中英

二维数组中的Python Numpy索引

[英]Python Numpy Indexing in 2 Dimensional Array

我是老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的等效项。 我怎样才能达到预期的效果?

最直译是

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

获得所需矩阵的一种干净方法是向量乘法。 在您的示例中,它将是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM