一维数组索引
1
2
3
4
5
|
>>> x
=
np.arange(
10
)
>>> x[
2
]
2
>>> x[
-
2
]
8
|
二维数组索引
1
2
3
4
5
|
>>> x.shape
=
(
2
,
5
)
# now x is 2-dimensional
>>> x[
1
,
3
]
8
>>> x[
1
,
-
1
]
9
|
数组切片
1
2
3
4
5
6
7
8
9
10
11
|
>>> x
=
np.arange(
10
)
>>> x[
2
:
5
]
array([
2
,
3
,
4
])
>>> x[:
-
7
]
array([
0
,
1
,
2
])
>>> x[
1
:
7
:
2
]
array([
1
,
3
,
5
])
>>> y
=
np.arange(
35
).reshape(
5
,
7
)
>>> y[
1
:
5
:
2
,::
3
]
array([[
7
,
10
,
13
],
[
21
,
24
,
27
]])
|
例:产生一个一组数组,使用数组来索引出需要的元素。让数组[3,3,1,8]取出x中的第3,3,1,8的四个元素组成一个数组view
1
2
3
4
5
|
>>> x
=
np.arange(
10
,
1
,
-
1
)
>>> x
array([
10
,
9
,
8
,
7
,
6
,
5
,
4
,
3
,
2
])
>>> x[np.array([
3
,
3
,
1
,
8
])]
array([
7
,
7
,
9
,
2
])
|
当然,类似切片那样,Index也可以使用负数。但是索引值不能越界!
1
2
|
>>> x[np.array([
3
,
3
,
-
3
,
8
])]
array([
7
,
7
,
4
,
2
])
|
例1:产生一个5X7的数组,选择0,2,4行,0,1,2列的数
1
2
3
|
>>> y
=
np.arange(
35
).reshape(
5
,
7
)
>>> y[np.array([
0
,
2
,
4
]), np.array([
0
,
1
,
2
])]
array([
0
,
15
,
30
])
|
例2:选取第0,2,4行,第1列的值
1
2
|
>>> y[np.array([
0
,
2
,
4
]),
1
]
array([
1
,
15
,
29
])
|
例3:选取第0,2,4行的值
1
2
3
4
|
>>> y[np.array([
0
,
2
,
4
])]
array([[
0
,
1
,
2
,
3
,
4
,
5
,
6
],
[
14
,
15
,
16
,
17
,
18
,
19
,
20
],
[
28
,
29
,
30
,
31
,
32
,
33
,
34
]])
|
例1
1
2
3
4
|
>>> y
=
np.arange(
35
)
>>> b
=
y>
20
>>> y[b]
array([
21
,
22
,
23
,
24
,
25
,
26
,
27
,
28
,
29
,
30
,
31
,
32
,
33
,
34
])
|
例2
1
2
3
4
5
|
>>> b[:,
5
]
# use a 1-D boolean whose first dim agrees with the first dim of y
array([
False
,
False
,
False
,
True
,
True
], dtype
=
bool
)
>>> y[b[:,
5
]]
array([[
21
,
22
,
23
,
24
,
25
,
26
,
27
],
[
28
,
29
,
30
,
31
,
32
,
33
,
34
]])
|
例3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>> x
=
np.arange(
30
).reshape(
2
,
3
,
5
)
>>> x
array([[[
0
,
1
,
2
,
3
,
4
],
[
5
,
6
,
7
,
8
,
9
],
[
10
,
11
,
12
,
13
,
14
]],
[[
15
,
16
,
17
,
18
,
19
],
[
20
,
21
,
22
,
23
,
24
],
[
25
,
26
,
27
,
28
,
29
]]])
>>> b
=
np.array([[
True
,
True
,
False
], [
False
,
True
,
True
]])
>>> x[b]
array([[
0
,
1
,
2
,
3
,
4
],
[
5
,
6
,
7
,
8
,
9
],
[
20
,
21
,
22
,
23
,
24
],
[
25
,
26
,
27
,
28
,
29
]])
|
例1:产生一个5X7的数组,使用数组来索引第一个轴,使用切换来索引第二个轴
1
2
3
4
5
|
>>> y
=
np.arange(
35
).reshape(
5
,
7
)
>>> y[np.array([
0
,
2
,
4
]),
1
:
3
]
array([[
1
,
2
],
[
15
,
16
],
[
29
,
30
]])
|
例2:切片与布尔类型索引
1
2
3
|
>>> y[b[:,
5
],
1
:
3
]
array([[
22
,
23
],
[
29
,
30
]])
|
例1:使用np.newwaxis可以直接扩展维度
1
2
3
4
|
>>> y.shape
(
5
,
7
)
>>> y[:,np.newaxis,:].shape
(
5
,
1
,
7
)
|
例2:这是利用了扩展维度与广播特性的矩阵相加。用5X1矩阵与1X5矩阵相加。
1
2
3
4
5
6
7
|
>>> x
=
np.arange(
5
)
>>> x[:,np.newaxis]
+
x[np.newaxis,:]
array([[
0
,
1
,
2
,
3
,
4
],
[
1
,
2
,
3
,
4
,
5
],
[
2
,
3
,
4
,
5
,
6
],
[
3
,
4
,
5
,
6
,
7
],
[
4
,
5
,
6
,
7
,
8
]])
|
例3:使用 ... 符号来表示其他维度
1
2
3
4
5
|
>>> z
=
np.arange(
81
).reshape(
3
,
3
,
3
,
3
)
>>> z[
1
,...,
2
]
array([[
29
,
32
,
35
],
[
38
,
41
,
44
],
[
47
,
50
,
53
]])
|
这例子也相当于下面的代码实现
1
2
3
4
|
>>> z[
1
,:,:,
2
]
array([[
29
,
32
,
35
],
[
38
,
41
,
44
],
[
47
,
50
,
53
]])
|