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写一个无界面的2048小游戏
May 24 Python
python实现图书管理系统
Mar 12 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
django echarts饼图数据动态加载的实例
Aug 12 Python
python中class的定义及使用教程
Sep 18 Python
使用Python的datetime库处理时间(RPA流程)
Nov 24 Python
如何基于Python实现数字类型转换
Feb 07 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
python文件名批量重命名脚本实例代码
Apr 22 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
php生成随机密码的几种方法
2011/01/17 PHP
PHP缓存技术的多种方法小结
2012/08/14 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
JS 中document.write()的用法和清空的原因浅析
2017/12/04 Javascript
使用命令行工具npm新创建一个vue项目的方法
2017/12/27 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
2021/01/29 jQuery
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
python读写文件操作示例程序
2013/12/02 Python
Python psutil模块简单使用实例
2015/04/28 Python
python实现RSA加密(解密)算法
2016/02/17 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
python实现雨滴下落到地面效果
2018/06/21 Python
python3利用venv配置虚拟环境及过程中的小问题小结
2018/08/01 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
Python字节单位转换实例
2019/12/05 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
仓管岗位职责范本
2014/02/08 职场文书
行政专员求职信范文
2014/05/03 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
vue首次渲染全过程
2021/04/21 Vue.js