python3-numpy数组切片和索引

1、切片

a = np.arange(10)
s = slice(2,7,2)   # 从索引 2 开始到索引 7 停止,间隔为2
print (a[s])  # [2 4 6]

# 也可以通过冒号分隔切片参数 start:stop:step 来进行切片操作
a = np.arange(10)
b = a[2:7:2]   # 从索引 2 开始到索引 7 停止,间隔为 2
print(b) # [2 4 6]

a = np.arange(10)  # [0 1 2 3 4 5 6 7 8 9]
b = a[5]
print(b)  # 5

a = np.arange(10)
print(a[2:])  # [2 3 4 5 6 7 8 9]

a = np.arange(10)
print(a[2:5])  # [2 3 4]

a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a[1:])  # [[3 4 5] [4 5 6]]

a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print (a[...,1])   # 第2列元素  [2 4 5]
print (a[1,...])   # 第2行元素  [3 4 5]
print (a[1])   # 第2行元素  [3 4 5]
print (a[...,1:])  # 第2列及剩下的所有元素  [[2 3] [4 5] [5 6]]

2、索引

x = np.array([[1,  2],  [3,  4],  [5,  6]])
y = x[[0,1,2],  [0,1,0]]
print (y)  # [1 4 5]

# 获取了 4X3 数组中的四个角的元素
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])
print ('我们的数组是:' )
print (x)
print ('\n')
y = x[[[0,0],[3,3]],[[0,2],[0,2]]]  # 0,0  0,2     3,3  3,2
print  ('这个数组的四个角元素是:')
print (y)  # [[ 0  2] [ 9 11]]

a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b = a[1:3, 1:3]  # 行1:3  列1:3
c = a[1:3,[1,2]]  # 行1:3  列[1,2]
d = a[...,1:]   # 行所有...  列1:
print(b)  # [[5 6] [8 9]]
print(c)  # [[5 6] [8 9]]
print(d)  # [[2 3] [5 6] [8 9]]

"""布尔索引
布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。
"""
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])
print ('我们的数组是:')
print (x)
print ('\n')
print  ('大于 5 的元素是:')
print (x[x >  5])  # [ 6  7  8  9 10 11]

# 使用了 ~(取补运算符)来过滤 NaN。
a = np.array([np.nan,  1,2,np.nan,3,4,5])
print (a[~np.isnan(a)])  # [1. 2. 3. 4. 5.]
print (a[np.isnan(a)])  # [nan nan]

# 过滤掉非复数元素
a = np.array([1,  2+6j,  5,  3.5+5j])
print (a[np.iscomplex(a)])  # [2.+6.j 3.5+5.j]

"""花式索引
花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应下标的行,如果目标是二维数组,那么就是对应位置的元素。
"""

x=np.arange(32).reshape((8,4))
print(x)
print (x[[4,2,1,7]])  # 取第4、2、1、7行的数据 [[16 17 18 19] [ 8  9 10 11] [ 4  5  6  7] [28 29 30 31]]
x=np.arange(32).reshape((8,4))
print (x[[-4,-2,-1,-7]]) # [[16 17 18 19] [24 25 26 27] [28 29 30 31] [ 4  5  6  7]]

# 传入多个索引数组
x=np.arange(32).reshape((8,4))
print (x[np.ix_([1,5,7,2],[0,3,1,2])])  # [[ 4  7  5  6] [20 23 21 22] [28 31 29 30] [ 8 11  9 10]]
"""
[1,5,7,2],[0,3,1,2]
1,0  1,3  1,1  1,2
5,0  5,3  5,1  5,2
7,0  7,3  7,1  7,2
2,0  2,3  2,1  2,2
"""

https://www.runoob.com/numpy/numpy-indexing-and-slicing.html
https://www.runoob.com/numpy/numpy-advanced-indexing.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值