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实现堆栈与队列的方法
Jan 15 Python
python3大文件解压和基本操作
Dec 15 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
Jan 11 Python
python数字图像处理之骨架提取与分水岭算法
Apr 27 Python
Python爬虫使用脚本登录Github并查看信息
Jul 16 Python
判断python字典中key是否存在的两种方法
Aug 10 Python
Python自动抢红包教程详解
Jun 11 Python
Python求正态分布曲线下面积实例
Nov 20 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
May 07 Python
python基于爬虫+django,打造个性化API接口
Jan 21 Python
Python合并pdf文件的工具
Jul 01 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
php图片上传存储源码并且可以预览
2011/08/26 PHP
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
php单例模式示例分享
2015/02/12 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
asp批量修改记录的代码
2008/06/25 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
jquery中radio checked问题
2015/03/16 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
基于javascript实现根据身份证号码识别性别和年龄
2016/01/22 Javascript
DeviceOne 让你一见钟情的App快速开发平台
2016/02/17 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
2014年高三班主任工作总结
2014/12/05 职场文书
学期个人自我总结
2015/02/13 职场文书
春晚观后感
2015/06/11 职场文书