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处理中文编码和判断编码示例
Feb 26 Python
处理Python中的URLError异常的方法
Apr 30 Python
Python读取一个目录下所有目录和文件的方法
Jul 15 Python
python实现折半查找和归并排序算法
Apr 14 Python
Python使用openpyxl读写excel文件的方法
Jun 30 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
pycharm 解除默认unittest模式的方法
Nov 30 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
Python实现直方图均衡基本原理解析
Aug 08 Python
Python爬取微信小程序Charles实现过程图解
Sep 29 Python
Django+Celery实现定时任务的示例
Jun 23 Python
Python&Matlab实现樱花的绘制
Apr 07 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读取数据库信息的几种方法
2008/05/24 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
php使用MySQL保存session会话的方法
2015/06/26 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
js图片上传前预览功能(兼容所有浏览器)
2016/08/24 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
layui时间控件选择时间范围的实现方法
2019/09/28 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
2020/03/09 Javascript
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
python查询mysql,返回json的实例
2018/03/26 Python
python http基本验证方法
2018/12/26 Python
Python遍历文件夹 处理json文件的方法
2019/01/22 Python
python读取图片任意范围区域
2019/01/23 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
Django vue前后端分离整合过程解析
2020/11/20 Python
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
写好自荐信的技巧
2013/11/08 职场文书
如何写一封打动人心的求职信
2014/02/17 职场文书
幼儿教师寄语集锦
2014/04/03 职场文书
党课心得体会范文
2014/09/09 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
道士塔读书笔记
2015/06/30 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python