对numpy中向量式三目运算符详解
如果用到数据筛选功能,可以使用x if condition else y的逻辑实现。如果使用的是纯Python,可以使用不断迭代的方式对每一组元素组合进行相应的判断筛选。不过,如果使用numpy中的向量化计可以大大加速运算的过程。
在numpy中有一个这个三目运算的向量版本numpy.where。where方法可以接收三个参数,第一个参数为条件向量,而第二、第三个参数可以是矩阵也可以是标量。接下来做一下相应功能的纯Python功能实现以及向量方式实现。
记录如下:
In [76]: xarr = np.array([1.1,1.2,1.3,1.4,1.5]) In [77]: yarr = xarr + 1 In [78]: xarr Out[78]: array([ 1.1, 1.2, 1.3, 1.4, 1.5]) In [79]: yarr Out[79]: array([ 2.1, 2.2, 2.3, 2.4, 2.5]) In [80]: cond = np.array([True,False,True,True,False]) In [81]: cond Out[81]: array([ True, False, True, True, False], dtype=bool) In [82]: result1 = [(x if c else y) for x,y,c in zip(xarr,yarr,cond)] In [83]: result1 Out[83]: [1.1000000000000001, 2.2000000000000002, 1.3, 1.3999999999999999, 2.5] In [84]: result2 = np.where(cond,xarr,yarr) In [85]: result2 Out[85]: array([ 1.1, 2.2, 1.3, 1.4, 2.5])
从浮点表示上,两者有一点点小小的差异,在小数点后多位,通常在数值表示上可以忽略。不过,这里还是要进行一下两个结果的一致性判断,因为之前也看到过Python在浮点表达上因为机器而产生的差异。
测试的结果如下:
In [87]: result1 == result2 Out[87]: array([ True, True, True, True, True], dtype=bool)
从上面的结果可以看出,两个计算结果是一致的。
以上这篇对numpy中向量式三目运算符详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
Python:Numpy 求平均向量的实例
如下所示: >>> import numpy as np >>> a = np.array([[1, 2, 3], [3, 1, 2]]) >>> b = np.array([[5, 2, 6], [5, 1, 2]]) >>> a array([[1, 2, 3], [3, 1, 2]]) >>> b array([[5, 2, 6], [5, 1, 2]]) >>> c = a + b >
-
Python 计算任意两向量之间的夹角方法
如图所示,我们要计算任意两个向量之间的夹角. (图中的坐标数字是估计值,随手给定) python代码如下 import math AB = [1,-3,5,-1] CD = [4,1,4.5,4.5] EF = [2,5,-2,6] PQ = [-3,-4,1,-6] def angle(v1, v2): dx1 = v1[2] - v1[0] dy1 = v1[3] - v1[1] dx2 = v2[2] - v2[0] dy2 = v2[3] - v2[1] angle1 = math.at
-
对numpy中数组转置的求解以及向量内积计算方法
有点抱歉的是我的数学功底确实是不好,经过了高中的紧张到了大学之后松散了下来.原本高中就有点拖后腿的数学到了大学之后更是一落千丈.线性代数直接没有学明白,同样没有学明白的还有概率及统计以及复变函数.时至今日,我依然觉得这是人生中让人羞愧的一件事儿.不过,好在我还有机会,为了不敷衍而去学习一下. 矩阵的转置有什么作用,我真是不知道了,今天总结完矩阵转置的操作之后先去网络上补充一下相关的知识. 今天的代码操作如下: In [15]: arr1 = np.arange(20) In [16]: arr1
-
对numpy中向量式三目运算符详解
如果用到数据筛选功能,可以使用x if condition else y的逻辑实现.如果使用的是纯Python,可以使用不断迭代的方式对每一组元素组合进行相应的判断筛选.不过,如果使用numpy中的向量化计可以大大加速运算的过程. 在numpy中有一个这个三目运算的向量版本numpy.where.where方法可以接收三个参数,第一个参数为条件向量,而第二.第三个参数可以是矩阵也可以是标量.接下来做一下相应功能的纯Python功能实现以及向量方式实现. 记录如下: In [76]: xarr =
-
numpy中索引和切片详解
索引和切片 一维数组 一维数组很简单,基本和列表一致. 它们的区别在于数组切片是原始数组视图(这就意味着,如果做任何修改,原始都会跟着更改). 这也意味着,如果不想更改原始数组,我们需要进行显式的复制,从而得到它的副本(.copy()). import numpy as np #导入numpy arr = np.arange(10) #类似于list的range() arr Out[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) arr[4] #索引(注意是从
-
NumPy中的维度Axis详解
浅谈NumPy中的维度Axis NumPy中的维度是一个很重要的概念,很多函数的参数都需要给定维度Axis,如何直观的理解维度呢?我们首先以二维数组为例进行说明,然后推广到多维数组. (有人将ndim属性叫维度,将axis叫轴,我还是习惯将axis称之为维度,axis=0称为第一个维度) 二维数组的列子 下面是一个二维数组的列子: In [1]: import numpy as np In [2]: x = np.random.randint(0, 9, (2, 3)) In [3]: x Ou
-
numpy中loadtxt 的用法详解
numpy中有两个函数可以用来读取文件,主要是txt文件, 下面主要来介绍这两个函数的用法 第一个是loadtxt, 其一般用法为 numpy.loadtxt(fname, dtype=, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0) 上面给出了loadtxt所有的关键字参数, 这里我们可以来一一解释并给出示例 这里我们使用的是jupyter note
-
python numpy中cumsum的用法详解
Cumsum :计算轴向元素累加和,返回由中间结果组成的数组 重点就是返回值是"由中间结果组成的数组" 以下代码在python3.6版本运行成功! 下面看代码,定义一个2*2*3的数组,所以其shape是2,2,3,索引分别0,1,2 shape 索引 2 0 2 1 3 2 代码: import numpy as np arr = np.array([[[1,2,3],[8,9,12]],[[1,2,4],[2,4,5]]]) #2*2*3 print(arr.cumsum(0))
-
Numpy掩码式数组详解
数据很大形况下是凌乱的,并且含有空白的或者无法处理的字符,掩码式数组可以很好的忽略残缺的或者是无效的数据点.掩码式数组由一个正常数组与一个布尔式数组组成,若布尔数组中为Ture,则表示正常数组中对应下标的值无效,反之False表示对应正常数组的值有效. 创建方法为,首先创建一个布尔型数组,然后通过numpy.ma子程序包提供的函数来创建掩码式数组,掩码式数组提供了各种所需函数. 创建实例如下: import numpy as np origin = np.arange(16).reshape(4
-
对python中list的拷贝与numpy的array的拷贝详解
1.python中列表list的拷贝,会有什么需要注意的呢? python变量名相当于标签名. list2=list1 ,直接赋值,实质上指向的是同一个内存值.任意一个变量list1(或list2)发生改变,都会影响另一个list2(或list1). eg: >>> list1=[1,2,3,4,5,6] >>> list2=list1 >>> list1[2]=88 >>> list1 [1, 2, 88, 4, 5, 6] >
-
python3中numpy函数tile的用法详解
tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复某个数组.比如tile(A,n),功能是将数组A重复n次,构成一个新的数组,我们还是使用具体的例子来说明问题:(至于为什么是在numpy.lib.shape_base中,我还是不太清楚.) 其实tile就是重复的意思,把一个数组a,当做模板,重复几次,生成另一个数组b 至于矩阵可以不以这样,还没有试过. 例子: 创建一个a,使用tile来创建b from numpy import * a=[0,1,2]
-
对docker中的overlay式网络详解
翻译自docker官方文档,原文:https://docs.docker.com/network/overlay/ overlay(覆盖)式网络会在多个docker守护进程所在的主机之间创建一个分布式的网络.这个网络会覆盖宿主机特有的网络,并允许容器连接它(包括集群服务中的容器)来安全通信.显然,docker会处理docker守护进程源容器和目标容器之间的数据报的路由. 当你初始化一个集群(swarm)或把一个docker宿主机加入一个已经存在的集群时,宿主机上会新建两个网络: 一个叫ingre
-
python编程中简洁优雅的推导式示例详解
目录 1. 列表推导式 增加条件语句 多重循环 更多用法 2. 字典推导式 3. 集合推导式 4. 元组推导式 Python语言有一种独特的推导式语法,相当于语法糖的存在,可以帮助你在某些场合写出较为精简酷炫的代码.但没有它,也不会有太多影响.Python语言有几种不同类型的推导式. 1. 列表推导式 列表推导式是一种快速生成列表的方式.其形式是用方括号括起来的一段语句,如下例子所示: lis = [x * x for x in range(1, 10)] print(lis) 输出 [1, 4
随机推荐
- AngularJS辅助库browserTrigger用法示例
- asp.net 身份验证机制实例代码
- 第9天:第一个CSS布局实例
- CKeditor与syntaxhighlight打造joomla代码高亮
- 用PyQt进行Python图形界面的程序的开发的入门指引
- JS遍历对象属性的方法示例
- asp.net中url字符串编码乱码的原因与解决方法
- C++基础入门教程(二):数据、变量、宏等
- SqlServer参数化查询之where in和like实现详解
- Oracle数据操作和控制语言详解
- Android实现在子线程中更新Activity中UI的方法
- jquery动态分页效果堪比时光网
- php实现网站插件机制的方法
- Bootstrap教程JS插件弹出框学习笔记分享
- xflash里的hello world程序
- Apache下禁止特定目录执行PHP 提高服务器安全性
- Java concurrency之AtomicLong原子类_动力节点Java学院整理
- c# 数据类型占用的字节数介绍
- C语言学生管理系统源码分享
- Python 和 JS 有哪些相同之处