数组切片规则:[start:end]
还可以定义步长:[start:end:step]
若不传递 start,则将其视为 0。例如 [:3] 等价于 [0:3]
若不传递 end,则视为该维度内数组的长度。例如[1:] 等价于从第一个元素开始一直截取到末尾。
若不传递 step,则视为 1,即默认步长为1,可以省略不写。
特别的:[::2] 表示隔一个元素取一个,因为 start 没写默认为0, end 也没写默认为截取到末尾,步长设定为2。
注:元素下标从0开始
一些例子:
# -*- coding: utf-8 -*-
import numpy as np
b = np.array([[[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, 30, 31, 32], [33, 34, 35, 36]],
])
#逗号分隔维度,维度下标从0开始
#数组元素下标也是从0开始
print("原始数组:")
print(b)
print("数组类型: ",b.shape)
print()
print("---------------------------------------")
print("第0维中第0个元素全选")
print("b[0, ::]为:")
print(b[0, ::]) #第0维中第0个元素全选
print("数组类型:", b[0, ::].shape)
print("---------------------------------------")
print()
print("第0维中第0到1个元素全选")
print("b[0:2, ::]为:")
print(b[0:2, ::]) #第0维中第0到1个元素全选
print("数组类型:", b[0:2, ::].shape)
print("---------------------------------------")
print()
print("第1维中从第1个元素开始往后全选")
print("b[:, 1:]为:")
print(b[:, 1:]) #第1维中从第1个元素开始往后全选
print("数组类型:", b[:, 1:].shape)
print("---------------------------------------")
print()
print("---------------------------------------")
print("第1维中第0、1个元素全选")
print("b[:, 0:2:]为:")
print(b[:, 0:2:]) #第1维中第0、1个元素全选
print("数组类型:", b[:, 0:2:].shape)
print("---------------------------------------")
print()
print("---------------------------------------")
print()
print("第1维中第0个元素全选")
print("b[::, 0]为:")
print(b[::, 0]) #第1维中第0个元素全选
print("数组类型:", b[::, 0].shape)
print("---------------------------------------")
print()
print("---------------------------------------")
print("第2维中第0个元素全选")
print("b[:, :, 0]为:")
print(b[:, :, 0]) #第2维中第0个元素全选
print("数组类型:", b[:, :, 0].shape)
print("---------------------------------------")
print()
代码运行结果:
原始数组:
[[[ 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 30 31 32]
[33 34 35 36]]]
数组类型: (3, 3, 4)
---------------------------------------
第0维中第0个元素全选
b[0, ::]为:
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
数组类型: (3, 4)
---------------------------------------
第0维中第0到1个元素全选
b[0:2, ::]为:
[[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
[[13 14 15 16]
[17 18 19 20]
[21 22 23 24]]]
数组类型: (2, 3, 4)
---------------------------------------
第1维中从第1个元素开始往后全选
b[:, 1:]为:
[[[ 5 6 7 8]
[ 9 10 11 12]]
[[17 18 19 20]
[21 22 23 24]]
[[29 30 31 32]
[33 34 35 36]]]
数组类型: (3, 2, 4)
---------------------------------------
---------------------------------------
第1维中第0、1个元素全选
b[:, 0:2:]为:
[[[ 1 2 3 4]
[ 5 6 7 8]]
[[13 14 15 16]
[17 18 19 20]]
[[25 26 27 28]
[29 30 31 32]]]
数组类型: (3, 2, 4)
---------------------------------------
---------------------------------------
第1维中第0个元素全选
b[::, 0]为:
[[ 1 2 3 4]
[13 14 15 16]
[25 26 27 28]]
数组类型: (3, 4)
---------------------------------------
---------------------------------------
第2维中第0个元素全选
b[:, :, 0]为:
[[ 1 5 9]
[13 17 21]
[25 29 33]]
数组类型: (3, 3)
---------------------------------------

本文详细介绍了Python numpy库中数组切片的规则和用法,包括[start:end:step]的语法,以及不指定start、end、step时的默认行为。通过多个实例展示了如何选取数组的不同部分,如选取特定维度的元素、隔元素取值等,帮助理解numpy数组的切片操作。
1466





