numpy数组切片总结

索引和切片

  • 注意点:将一个标量赋值给一个切片时,该值会自动传给选区中的每个元素,所以,任何修改都是在原数据之上的修改
  • 如果不想再原数据上修改,则可以调用复制操作,ary.copy(),然后进行修改操作
  1. 一维数组切片和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]
  1. 二维数组,索引位置是一维数组,其中每行为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]] 
  1. 布尔型索引
    根据对应被索引值是否为真,进行选取,再选取时可以使用 &、 __|__这类布尔运算符。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.        ]]
  1. 花式索引
    以特定的顺序选取数组,它与切片不同,它是将数据复制到新数组中的。
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]

索引切片总结

  1. 按照Python切片方法和通过布尔索引赋值的方法,都是在原数据上进行操作
  2. 花式索引,是创建了新的数组数据

转载请标明来源

你可能感兴趣的:(python学习)