网站首页 > 技术文章 正文
如下带你走进 @ 机器人时代
Discover 点击上面蓝色文字,关注我们
NumPy中数组的切片和索引与list的操作类似:
import numpy as np
#一维数组切片
a = np.arange(12)
#生成切片对象
s = slice(1,10,2)
p=a[1:10:2]
q=a[3]
m=a[:9]
#从索引2开始到索引9停止,间隔时间为2
print(a[s])
print(a[p])
print(a[q])
print(a[m])
输出结果:
[1 3 5 7 9]
[1 3 5 7 9]
3
[0 1 2 3 4 5 6 7 8]
下面我们来看看多维数组的操作:
s=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]])
print('打印全部\n',s[0:])
print('从第2行开始切\n',s[1:])
print('从第2行到第4行切出来,不含第4行\n',s[1:3])
输出结果:
打印全部
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]
[13 14 15]]
从第2行开始切
[[ 4 5 6]
[ 7 8 9]
[10 11 12]
[13 14 15]]
从第2行到第4行切出来,不含第4行
[[4 5 6]
[7 8 9]]
还可以用...(省略号)来写:
#多维数组的切片
s=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]])
print('打印全部\n',s[0:])
# print('从第2行开始切\n',s[1:])
# print('从第2行到第4行切出来,不含第4行\n',s[1:3])
print('打印第3列\n',s[...,2]) #打印第3列
print('打印第3行\n',s[2,...]) #打印第3行
print('打印第2列以后的全部\n',s[...,1:])
输出结果:
打印全部
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]
[13 14 15]]
打印第3列
[ 3 6 9 12 15]
打印第3行
[7 8 9]
打印第2列以后的全部
[[ 2 3]
[ 5 6]
[ 8 9]
[11 12]
数组的索引除了以上方法外,还有整数数组索引、布尔索引及花式索引。
下面代码展示了数组索引的方式:
s=np.array(
[[1,2,3],
[4,5,6],
[7,8,9],
[10,11,12],
[13,14,15]
])
#获取数组中 (0,0),(1,1) 和 (3,1) 位置处的元素
y = s[[0,1,3], [0,1,1]]
print (y)
#获取数组中的四个角的元素
rows = np.array([[0,0],[4,4]])#行索引
cols = np.array([[0,2],[0,2]])#列索引
x = s[rows,cols]
print ('这个数组的四个角元素是:')
print (x)
输出结果:
[ 1 5 11]
这个数组的四个角元素是:
[[ 1 3]
[13 15]]
使用...与:号进行切片:
d = np.array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
#对行列分别进行切片
e = d[1:4,1:3]
print('d[1:4,1:3]方法\n',e)
#行使用基础索引,对列使用高级索引
f = d[1:4,[1,2]]
#显示切片后结果
print ('d[1:4,[1,2]]方法\n',f)
#对行使用省略号
x=d[...,1:]
print('d[...,1:]方法\n',x)
输出结果:
d[1:4,1:3]方法
[[ 4 5]
[ 7 8]
[10 11]]
d[1:4,[1,2]]方法
[[ 4 5]
[ 7 8]
[10 11]]
d[...,1:]方法
[[ 1 2]
[ 4 5]
[ 7 8]
[10 11]]
我们来看看布尔索引的方法:
#布尔索引
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print ('原数组是:')
print (x)
# 打印出大于 5 的元素
print ('大于 5 的元素是:\n')
print (x[x > 5])
#使用 ~(取补运算符)来过滤 NaN
print ('过滤掉是NaN的元素:\n')
a = np.array([np.nan, 1,2,np.nan,3,4,5])
print (a[~np.isnan(a)])
#从数组中过滤掉非复数元素
print ('过滤掉不是复数的元素:')
a = np.array([1, 2+6j, 5, 3.5+5j])
print (a[np.iscomplex(a)])
输出结果:
原数组是:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
大于 5 的元素是:
[ 6 7 8 9 10 11]
过滤掉是NaN的元素:
[1. 2. 3. 4. 5.]
过滤掉是复数的元素:
[2. +6.j 3.5+5.j]
在多条件布尔索引的时候,如果条件是x[x>5 & x<10],运行时会报错,解决办法如下:
x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print('原数组:\n', x)
print('大于5且小于10的元素:')
print('条件加小括号:')
print(x[(x > 5) & (x < 10)])
print('使用np.logical_and方法:')
print(x[np.logical_and(x > 5, x < 10)])
print('使用np.all方法:')
print(x[np.all([x > 5, x < 10],axis=0)])
输出结果:
原数组:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
大于5且小于10的元素:
条件加小括号:
[6 7 8 9]
使用np.logical_and方法:
[6 7 8 9]
使用np.all方法:
[6 7 8 9]
部分案例来自网络,感谢网友的大力分享。
花式索引也可以理解为整数数组索引,但是它们之间又略有不同。
x=np.arange(32).reshape((8,4))
#生成8行4列的二维数组
print(x)
#分别对应 第4行数据、第2行数据
# 第1行数据、第7行数据项
print ('索引结果:\n',x[[4,2,1,7]])
#注意索引数组也是一个二维数组
输出结果:
[[ 0 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]]
索引结果:
[[16 17 18 19]
[ 8 9 10 11]
[ 4 5 6 7]
[28 29 30 31]]
如果需要同时对列进行索引,要注意添加np.ix_:
x=np.arange(32).reshape((8,4))
# #生成8行4列的二维数组
=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] 表示与行索引相对应的列索引值,也就是行中的元素值会按照列索引值排序。比如,第一行元素,未排序前的顺序是 [4,5,6,7],经过列索引排序后变成了 [4,7,5,6]。
np.ix_ 函数就是输入两个数组,产生笛卡尔积的映射关系。笛卡尔乘积是指在数学中,两个集合 X 和 Y 的笛卡尔积(Cartesian product),又称直积,表示为 X×Y,第一个对象是X的成员而第二个对象是 Y 的所有可能有序对的其中一个成员。
如果 np.xi_ 中输入两个列表,则第一个列表存的是待提取元素的行标,第二个列表存的是待提取元素的列标,第一个列表中的每个元素都会遍历第二个列表中的每个值,构成新矩阵的一行元素。
如果你在开发办公室自动化程序时,操作excel表格数据时,这些索引方法就可以大派用场,让你省去很多麻烦。
坚持学习,这样每天都能进步一点点!!
往期回顾:
- 来来来,送你一个金牌销售机器人,7X24小时不休,不要工资免费用!
- RPA技术在旅行社销售业务中如何凤凰涅槃??
- 【工资翻三倍】系列:一招搞定九宫图片切割机器人,让你的朋友圈更加炫酷!
本文引用和摘录相关内容,请联系侵删。
- END -
最后,文章有帮助到你的话【点赞在看】
激励我们分享更多的干货!
猜你喜欢
- 2024-09-15 Scala学习六之数组和元组了解(scala 字符串数组)
- 2024-09-15 【Python数据分析系列】全面梳理数组维度转化和堆叠操作(案例)
- 2024-09-15 ST 语言数组处理(st语言数组array)
- 2024-09-15 机器学习实战:Numpy多维数组的创建、索引与切片
- 2024-09-15 4小时的工作,1秒完成,中学体育比赛赛道汇总VBA数组字典进阶
- 2024-09-15 22.C# 多维数组(多维数组对象)
- 2024-09-15 VBA永远的神 3天工作1秒完成 20万行料号BOM表处理 数组字典案例
- 2024-09-15 C语言二维数组(c语言二维数组排序)
- 2024-09-15 Excel数据透视表、vlookup、数组公式、VBA自定义函数一对多查找
- 2024-09-15 程序大佬的秘密——C语言之数组二三事
- 1512℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 556℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 504℃MySQL service启动脚本浅析(r12笔记第59天)
- 482℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 480℃启用MySQL查询缓存(mysql8.0查询缓存)
- 460℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 440℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 438℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)