索引和切片
- 注意点:将一个标量赋值给一个切片时,该值会自动传给选区中的每个元素,所以,任何修改都是在原数据之上的修改
- 如果不想再原数据上修改,则可以调用复制操作,ary.copy(),然后进行修改操作
- 一维数组切片和Python列表差不多
# 数组切片
import numpy as np
# 一维情况
d1 = np.arange(10)
print(d1)
# 截取前三个
print(d1[:3])
# 截取第七个之后的元素
print(d1[7:])
# 截取第3个到第7个之间的元素
print(d1[3:7])
输出:
[0 1 2 3 4 5 6 7 8 9]
[0 1 2]
[7 8 9]
[3 4 5 6]
- 二维数组,索引位置是一维数组,其中每行为axis0,每列为axis1。
# 二维数组切片
d2 = np.arange(16).reshape((4,4))
print(d2, '\n')
# 选取第1列
print(d2[:,1],'\n')
# 选取第2行
print(d2[2,:], '\n')
# 选取一个区域
print(d2[1:3, 0:2], '\n')
输出
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[ 1 5 9 13]
[ 8 9 10 11]
[[4 5]
[8 9]]
- 布尔型索引
根据对应被索引值是否为真,进行选取,再选取时可以使用 &、 __|__这类布尔运算符。Python中的and和or不能使用
from numpy.random import randn
# 布尔型索引
b1 = np.arange(4)
print('b1:\n', b1)
ib1 = np.array([True, False, True, False])
print('布尔型选值:\n', b1[ib1])
# 判断运算
b2 = randn(4, 4)
print('b2:\n', b2)
print('ib2:\n', (b2 <= 0) | (b2 > 1))
b2[b2<=0] = 0
b2[b2>1] = 1
print('赋值:\n', b2)
##########输出###########
b1:
[0 1 2 3]
布尔型选值:
[0 2]
b2:
[[-0.54312082 -0.01659585 1.46688128 0.79069372]
[-0.69340211 0.49814924 0.13698157 -0.46387853]
[ 0.84467615 0.53895468 -0.26086526 0.77963523]
[ 0.17493484 0.62414687 0.43303577 -0.28845546]]
ib2:
[[ True True True False]
[ True False False True]
[False False True False]
[False False False True]]
赋值:
[[0. 0. 1. 0.79069372]
[0. 0.49814924 0.13698157 0. ]
[0.84467615 0.53895468 0. 0.77963523]
[0.17493484 0.62414687 0.43303577 0. ]]
- 花式索引
以特定的顺序选取数组,它与切片不同,它是将数据复制到新数组中的。
h1 = np.arange(16).reshape((4,4))
print('h1:\n', h1)
t1 = h1[[1, 2, 0]]
print('按行选择:\n', t1)
t2 = h1[:, [2,1,0]]
print('按列选择:\n', t2)
print('对比原数组:\n', h1) # 说明这不是在原数组上进行操作的
t3 = h1[[0,2,1], [3,0,2]]
print('按位置选择:\n', t3)
#########输出#########
h1:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
按行选择:
[[ 4 5 6 7]
[ 8 9 10 11]
[ 0 1 2 3]]
按列选择:
[[ 2 1 0]
[ 6 5 4]
[10 9 8]
[14 13 12]]
对比原数组:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
按位置选择:
[3 8 6]
索引切片总结
- 按照Python切片方法和通过布尔索引赋值的方法,都是在原数据上进行操作
- 花式索引,是创建了新的数组数据
转载请标明来源
本文详细介绍了NumPy库中数组的索引和切片操作,包括一维和二维数组的切片,布尔型索引,以及花式索引。探讨了不同索引方式对数据操作的影响,如原地修改与数据复制的区别。
1488

被折叠的 条评论
为什么被折叠?



