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接收Gmail新邮件并发送到gtalk的方法
Mar 10 Python
python高手之路python处理excel文件(方法汇总)
Jan 07 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
Python判断变量是否为Json格式的字符串示例
May 03 Python
python之Character string(实例讲解)
Sep 25 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
Python实现针对json中某个关键字段进行排序操作示例
Dec 25 Python
33个Python爬虫项目实战(推荐)
Jul 08 Python
安装python及pycharm的教程图解
Oct 10 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 Python
基于Python计算圆周率pi代码实例
Mar 25 Python
Python 调用C++封装的进一步探索交流
Mar 04 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
PHP 模板高级篇总结
2006/12/21 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
利用JS进行图片的切换即特效展示图片
2013/12/03 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python求斐波那契数列示例分享
2014/02/14 Python
python学习笔记:字典的使用示例详解
2014/06/13 Python
Django 实现下载文件功能的示例
2018/03/06 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
解决python对齐错误的方法
2020/07/16 Python
露营世界:Camping World
2017/02/02 全球购物
经贸日语专业个人求职信
2013/12/13 职场文书
八一演出活动方案
2014/02/03 职场文书
员工拓展培训方案
2014/02/15 职场文书
致800米运动员广播稿
2014/02/16 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
火烧圆明园观后感
2015/06/03 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS
Redis 哨兵机制及配置实现
2022/03/25 Redis