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