Numpy 索引

一維索引

我們都知道,在元素列表或者數組中,我們可以用如同a[2]一樣的表示方法,同樣的,在Numpy中也有相對應的表示方法:

import numpy as np
A = np.arange(3,15)
# array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
print(A[3]) # 6

讓我們將矩陣轉換為二維的,此時進行同樣的操作:

A = np.arange(3,15).reshape((3,4))
"""
array([[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]])
"""
print(A[2])
# [11 12 13 14]

實際上這時的A[2]對應的就是矩陣A中第三行(從0開始算第一行)的所有元素。

二維索引

如果你想要表示具體的單個元素,可以仿照上述的例子:

print(A[1][1]) # 8

此時對應的元素即A[1][1],在A中即橫縱座標都為1,第二行第二列的元素,即8(因為計數從0開始)。同樣的還有其他的表示方法:

print(A[1, 1]) # 8

在Python的 list 中,我們可以利用:對一定範圍內的元素進行切片操作,在Numpy中我們依然可以給出相應的方法:

print(A[1, 1:3]) # [8 9]

這一表示形式即針對第二行中第2到第4列元素進行切片輸出(不包含第4列)。 此時我們適當的利用for函數進行打印:

for row in A:
print(row)
"""
[ 3, 4, 5, 6]
[ 7, 8, 9, 10]
[11, 12, 13, 14]
"""

此時它會逐行進行打印操作。如果想進行逐列打印,就需要稍稍變化一下:

for column in A.T:
print(column)
"""
[ 3, 7, 11]
[ 4, 8, 12]
[ 5, 9, 13]
[ 6, 10, 14]
"""

上述表示方法即對A進行轉置,再將得到的矩陣逐行輸出即可得到原矩陣的逐列輸出。

最後依然說一些關於迭代輸出的問題:

import numpy as np
A = np.arange(3,15).reshape((3,4))
print(A.flatten())
# array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
for item in A.flat:
print(item)
# 3
# 4
……
# 14

這一腳本中的flatten是一個展開性質的函數,將多維的矩陣進行展開成1行的數列。而flat是一個迭代器,本身是一個object屬性。


分享到:


相關文章: