python由已知数组快速生成新数组的方法


Posted in Python onApril 08, 2020

需求描述

在利用numpy进行数据分析时,常有的一个需求是:根据已知的数组生成新数组。这个问题又可以分为两类:

  1. 根据筛选条件生成子数组;
  2. 根据变换条件生成新数组(新数组shape与原数组相同)

下面简单总结.

生成子数组

情况1

已知数组a,以及若干筛选条件conds,要求从数组a中生成一个子数组b。

解决办法:b=a[conds]比如b=a[a>0],b=a[(a>=1)|(a<=-2)], b=a[(a>=1)&(a<=3)]

实例:如下

# 实例1.1:已知数组a,要求找出所有a>0的元素,然后生成一个新数组。
a = np.arange(-5,5,1)
print('原数组a:',a)
b = a[a>0]
print('实例1结果:',b)

# 实例1.2:已知数组a,要求找出所有a>=1或a<=-2的元素,然后生成一个新数组。
b = a[(a>=1) | (a<=-2)]
print('实例2结果:',b)

# 实例1.3:已知数组a,要求找出所有a>=1并且a<=3的元素,然后生成一个新数组。
b = a[(a>=1) & (a<=3)]
print('实例3结果:',b)

运行结果:

原数组a: [-5 -4 -3 -2 -1  0  1  2  3  4]
实例1结果: [1 2 3 4]
实例2结果: [-5 -4 -3 -2  1  2  3  4]
实例3结果: [1 2 3]

情况2

已知数组a和数组b(shape相同),以及对数组a的筛选条件conds_a。要求从数组b中生成一个子数组c,其中的元素id,与满足筛选条件的数组a的元素id一一对应。

解决办法:

c = b[conds_a],比如c = b[(a>=1) & (a<=3)]

实例:如下

a = np.arange(-5,5,1)
b = np.arange(-50,50,10)
print('数组a:',a)
print('数组b:',b)

c = b[(a>=1) & (a<=3)]
print('新数组c:', c)

运行结果:

数组a: [-5 -4 -3 -2 -1  0  1  2  3  4]
数组b: [-50 -40 -30 -20 -10   0  10  20  30  40]
新数组c: [10 20 30]

变换成新数组

已知数组a,以及若干变换条件conds,要求生成一个新数组b(与原数组shape相同)。解决办法:

方法1:np.where(where(condition, [x, y]))
使用场景:当变换条件只有两个以下时,比如实例2.1。该方法等价于:if condition x else y

方法2: np.select(condlist, choicelist, default=0)
使用场景:当变换条件有任意多个时,比如实例2.2。该方法等价于:

if condlist[0]:
  choicelist[0]
elif condilist[1]:
  choicelist[1]
...
else:
  default

方法3:np.piecewise(x, condlist, funclist, *args, **kw)

使用场景:同方法2,只不过变换条件较复杂,无法直接写出,要用函数来表示。
实例:如下

# 实例2.1:已知数组a,要求对所有a<0的元素取绝对值,对其他元素设为0,然后生成一个新数组
a = np.arange(-5,5,1)
print(a)
b = np.where(a<0, abs(a),0)
print('实例2.1结果:',b)

# 实例2.2:已知数组a,要求对所有a<0的元素取绝对值,对a=0的元素+100,对a>0的元素平方,然后生成一个新数组
b = np.select([a<0, a==0, a>0], [abs(a), a+100, a**2])
print('实例2.2结果:',b)

运行结果:

[-5 -4 -3 -2 -1  0  1  2  3  4]
实例2.1结果: [5 4 3 2 1 0 0 0 0 0]
实例2.2结果: [5 4 3 2 1 100 1 4 916]

到此这篇关于python由已知数组快速生成新数组的方法的文章就介绍到这了,更多相关python 已知数组快速生成新数组内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木

Python 相关文章推荐
python实现在目录中查找指定文件的方法
Nov 11 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
python字符串str和字节数组相互转化方法
Mar 18 Python
Python使用Pickle库实现读写序列操作示例
Jun 15 Python
Python3.5局部变量与全局变量作用域实例分析
Apr 30 Python
python在openstreetmap地图上绘制路线图的实现
Jul 11 Python
pip指定python位置安装软件包的方法
Jul 12 Python
Python实现微信小程序支付功能
Jul 25 Python
python机器学习实现决策树
Nov 11 Python
Python数据可视化:顶级绘图库plotly详解
Dec 07 Python
后端开发使用pycharm的技巧(推荐)
Mar 27 Python
Python获取江苏疫情实时数据及爬虫分析
Aug 02 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 #Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 #Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 #Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 #Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 #Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 #Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 #Python
You might like
Home Coffee Roasting
2021/03/03 咖啡文化
用PHP读取flv文件的播放时间长度
2009/09/03 PHP
php数组(array)输出的三种形式详解
2013/06/05 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
Opacity.js
2007/01/22 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
jQuery 表单验证扩展代码(一)
2010/10/11 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
JS自定义混合Mixin函数示例
2016/11/26 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
Python FTP操作类代码分享
2014/05/13 Python
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
python获取代码运行时间的实例代码
2018/06/11 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
python pygame模块编写飞机大战
2018/11/20 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
使用canvas绘制超炫时钟
2014/12/17 HTML / CSS
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
大学学年自我鉴定
2013/10/28 职场文书
公司庆典活动邀请函
2014/01/09 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android