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 open读写文件实现脚本
Sep 06 Python
跟老齐学Python之用Python计算
Sep 12 Python
详解Python中的__new__、__init__、__call__三个特殊方法
Jun 02 Python
基于树莓派的语音对话机器人
Jun 17 Python
解决python xx.py文件点击完之后一闪而过的问题
Jun 24 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
Aug 29 Python
解析Python3中的Import
Oct 13 Python
基于python解线性矩阵方程(numpy中的matrix类)
Oct 21 Python
python实现五子棋程序
Apr 24 Python
Python 中如何写注释
Aug 28 Python
详解BeautifulSoup获取特定标签下内容的方法
Dec 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轻松实现中英文混排字符串截取
2014/05/28 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
2017/06/09 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
jQuery+ajax实现文章点赞功能的方法
2015/12/31 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
浅谈React高阶组件
2018/03/28 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
高效jQuery选择器的5个技巧实例分析
2019/11/26 jQuery
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
基于pip install django失败时的解决方法
2018/06/12 Python
python调用c++传递数组的实例
2019/02/13 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
HTML5新增加的功能详解
2016/09/05 HTML / CSS
Html5移动端div固定到底部实现底部导航条的几种方式
2021/03/09 HTML / CSS
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
全球性的奢侈品梦工厂:Forzieri(福喜利)
2019/02/20 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
优秀纪检干部材料
2014/08/27 职场文书
2014年残联工作总结
2014/11/21 职场文书
小学音乐课教学反思
2016/02/18 职场文书
关于保护环境的建议书
2019/06/24 职场文书
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript
python多次执行绘制条形图
2022/04/20 Python