【问题标题】:Python Numpy Indexing in 2 Dimensional Array二维数组中的 Python Numpy 索引
【发布时间】:2017-09-20 00:53:21
【问题描述】:

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

【问题讨论】:

  • 你试过什么?你以前写过python吗?除了基本的python,你真正需要知道的是(i, j)在numpy中变成[i, j]Dim mymatrix(10,10)变成mymatrix = np.empty((10, 10))

标签: python arrays numpy


【解决方案1】:

最直译是

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

【讨论】:

  • 非常感谢现在对我有意义的回复。我错过了方括号的重要性。当您自己学习时,就会发生这种类型的错误。我已经尝试过了,它有效-yippee!我的 Python 打印语句中还有一些额外的圆括号,这会产生错误。我现在可以继续我的项目,在 RasberryPi 下自动打开和关闭百叶窗。硬件已完成并经过测试。再次感谢。
【解决方案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

所以

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

【讨论】:

    猜你喜欢
    • 2011-07-07
    • 2020-07-30
    • 2012-04-10
    • 1970-01-01
    • 2019-01-09
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多