對于一維數(shù)組,其索引、切片和歷遍操作與Python列表中的相應操作基本一致。
import numpy as np
a = np.arange(10)**3
a
Out[74]: array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729], dtype=int32)
a[2]
Out[75]: 8
a[2:5]
Out[76]: array([ 8, 27, 64], dtype=int32)
a[:6:2] = -1000
a
Out[78]: array([-1000, 1, -1000, 27, -1000, 125, 216, 343, 512, 729], dtype=int32)
a[::-1]
Out[79]: array([ 729, 512, 343, 216, 125, -1000, 27, -1000, 1, -1000], dtype=int32)
對于多維數(shù)組,每一個維度上均需給出一個索引值,不同維度的索引值之間用逗號隔開。
def f(x, y):
return 10*x + y
b = np.fromfunction(f, (5,4), dtype=int)
b
Out[82]:
array([[ 0, 1, 2, 3],
[10, 11, 12, 13],
[20, 21, 22, 23],
[30, 31, 32, 33],
[40, 41, 42, 43]])
b[2,3]
Out[83]: 23
b[0:5,1]
Out[84]: array([ 1, 11, 21, 31, 41])
b[:,1]
Out[85]: array([ 1, 11, 21, 31, 41])
b[1:3,:]
Out[86]:
array([[10, 11, 12, 13],
[20, 21, 22, 23]])
b[b[:,0]<20,1]
Out[89]: array([ 1, 11])
對于多維數(shù)組,如果給出的索引值數(shù)量少于數(shù)組的維度,則默認缺失索引值的維度上選取整個切片,如b[-1]等同于b[-1, :]或b[i, ...]。注意,... 會根據數(shù)組的維度,自動省略對相應維度上索引值的定義。例如對于一個五維數(shù)組x:
-
x[1, 2, ...]等價于x[1, 2, :, :, :]; -
x[..., 3]等價于x[:, :, :, :, 3]; -
x[4, ..., 5, :]等價于x[4, :, :, 5, :]
c = np.array([[[ 0, 1, 2],
[ 10, 12, 13]],
[[100,101,102],
[110,112,113]]])
c.shape
Out[92]: (2, 2, 3)
c[1, ...]
Out[93]:
array([[100, 101, 102],
[110, 112, 113]])
c[..., 2]
Out[94]:
array([[ 2, 13],
[102, 113]])
多維數(shù)組的歷遍是相對于第一維進行的。如果要對數(shù)組中的每個元素進行歷遍,可以使用數(shù)組的flat屬性。
b
Out[95]:
array([[ 0, 1, 2, 3],
[10, 11, 12, 13],
[20, 21, 22, 23],
[30, 31, 32, 33],
[40, 41, 42, 43]])
for row in b:
print(row)
[0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]
for element in b.flat:
print(element)
0
1
2
3
10
11
12
13
20
21
22
23
30
31
32
33
40
41
42
43