numpy.array切片和索引操作

基本索引操作

import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print arr[2]#第2行的数组
print arr[0][2]#第0行第2列的值
print arr[0, 2] # 普通Python数组不能用,同上
[7 8 9]
3
3

切片操作

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print arr[:]#打印整个3*3数列
print arr[:2]#打印0,1行
print arr[:1, :2]#打印0行,0,1列
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 2 3]
 [4 5 6]]
[[1 2]]

布尔型索引

import numpy as np
import numpy.random as np_random
name_arr = np.array(['Bob', 'Joe', 'Will'])
rnd_arr = np_random.randn(3, 3) 	    # 随机3*3数组
print name_arr == 'Bob' 			   # 返回布尔数组,元素等于'Bob'为True,否则False。
print rnd_arr[name_arr == 'Bob']  		# 利用布尔数组选择行,第0行
print rnd_arr[name_arr == 'Bob', :2]  	# 增加限制打印列的范围,第0行 前2列
print rnd_arr[~(name_arr == 'Bob')] 	# 对布尔数组的内容取反,第1,2列
print rnd_arr[(name_arr == 'Bob') | (name_arr == 'Will')] # 逻辑运算混合结果
rnd_arr[name_arr != 'Joe'] = 7  		# 先布尔数组选择行,然后把每行的元素设置为7。
print rnd_arr
[[-0.09102884 -0.09452611  1.42854702]
 [ 2.15963354  0.24216261 -2.26044752]
 [-0.72741325 -1.085561    0.54600936]]
[ True False False]
[[-0.09102884 -0.09452611  1.42854702]]
[[-0.09102884 -0.09452611]]
[[ 2.15963354  0.24216261 -2.26044752]
 [-0.72741325 -1.085561    0.54600936]]
[[-0.09102884 -0.09452611  1.42854702]
 [-0.72741325 -1.085561    0.54600936]]
[[ 7.          7.          7.        ]
 [ 2.15963354  0.24216261 -2.26044752]
 [ 7.          7.          7.        ]]

花式索引(Fancy indexing)

arr = np_random.randn(3, 3) 	    # 随机3*3数组
print arr
print arr[[1, -1]]# 打印arr[1],a[-1]行
print arr[[0, 1], [0, 1]]#打印a[0, 0],a[1, 1]
print arr[[0, 1]][:, [1, 2]]#打印0,1行的1,2列
print arr[:2, [1,2]]#同上
print arr[np.ix_([0, 1], [1, 2])]#同上,最清楚的写法
[[-0.60100046 -0.16245393  0.04618795]
 [-0.05029884 -1.43052367 -0.91403785]
 [-1.445763   -1.4240193  -0.79258699]]
[[-0.05029884 -1.43052367 -0.91403785]
 [-1.445763   -1.4240193  -0.79258699]]
[-0.60100046 -1.43052367]
[[-0.16245393  0.04618795]
 [-1.43052367 -0.91403785]]
[[-0.16245393  0.04618795]
 [-1.43052367 -0.91403785]]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值