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实现rest请求api示例
Apr 22 Python
9种python web 程序的部署方式小结
Jun 30 Python
Python中list初始化方法示例
Sep 18 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
Python验证文件是否可读写代码分享
Dec 11 Python
python实现基于SVM手写数字识别功能
May 27 Python
利用numpy和pandas处理csv文件中的时间方法
Apr 19 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
Python OpenCV利用笔记本摄像头实现人脸检测
Aug 20 Python
python如何统计代码运行的时长
Jul 24 Python
python 类之间的参数传递方式
Dec 20 Python
Python中else的三种使用场景
Jun 16 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
html中select语句读取mysql表中内容
2006/10/09 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
php基于Snoopy解析网页html的方法
2015/07/09 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
PHP获取路径和目录的方法总结【必看篇】
2017/03/04 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
Javascript之深入浅出prototype
2017/02/06 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
解决axios post 后端无法接收数据的问题
2019/10/29 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
python+django+rest框架配置创建方法
2019/08/31 Python
python实现机器人卡牌
2019/10/06 Python
Python argparse模块使用方法解析
2020/02/20 Python
python关于倒排列的知识点总结
2020/10/13 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
优秀中职教师事迹材料
2014/08/26 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
2014年个人委托书范本
2014/10/13 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android