Python+numpy实现函数向量化

Python本身对向量操作的支持并不是很好,需要借助列表推导式或函数式编程来实现,例如:

>>> import random

# 生成随机测试数据

>>> x = random.sample(range(1000), 5) >>> y = random.sample(range(1000), 5)

# 列表推导式,模拟向量减法

>>> [vecX-vecY for vecX, vecY in zip(x,y)] [-171, -370, -66, 282, 231]

# 列表推导式,模拟向量减法

>>> f = lambda a, b: a-b >>> [f(a,b) for a, b in zip(x,y)] [-171, -370, -66, 282, 231]

# 函数式编程,map,模拟向量加法

>>> list(map(lambda a, b: a+b, x, y)) [1067, 488, 1486, 998, 327]

Python扩展库numpy本身提供的大量函数都具有向量化的特点,并且可以把普通的Python函数向量化,可以使得Python操作向量更方便: >>> import numpy as np

# 定义一个普通的减法函数 >>> def sub(a, b): return a-b

# 把减法函数向量化

>>> vecSub = np.vectorize(sub) >>> print(vecSub(x,y)) [-171 -370 -66 282 231]

# 把加法lambda表达式向量化

>>> vecAdd = np.vectorize(lambda a, b: a+b) >>> print(vecAdd(x,y)) [1067 488 1486 998 327]

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2017-09-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

资源 | 从数组到矩阵的迹,NumPy常见使用大总结

43890
来自专栏数据结构与算法

25:最长最短单词

25:最长最短单词 总时间限制: 1000ms 内存限制: 65536kB描述 输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格...

398100
来自专栏calmound

hust 1607 Triangles(经典好题)

题意:给出一定的点,然后再给出哪些点相连,问最后这些相连点的组成多少个三角形,hash的应用 分析:转载牛人的思想 题意:给一些点的坐标和里面的点构成的一些线段...

30280
来自专栏机器学习算法与Python学习

Python: numpy总结(3)

21、dot矩阵点积 例子: ll = [[1,2,3],[4,5,6],[7,8,9]]ld = dot(ll,ll) print 'dot:',l...

34840
来自专栏机器学习从入门到成神

稀疏矩阵转置

矩阵是线性代数中的一个知识,刚开始学习的时候可能感觉不到它有什么用处,最初的感觉就是对二维数据的操作。其实现实生活中矩阵的用处太大了,设计领域相当的广泛。在此只...

27610
来自专栏ACM算法日常

将树围起来(几何凸包)- HDU 1392

在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。如下图所示。计算凸包也就是求得外围(蓝线上)的那些点。

10420
来自专栏mathor

科学计算库Numpy

 genfromtxt函数里穿了三个参数,分别是 要打开的文档名称,分隔符,以什么类型存储  打印结果:

12640
来自专栏技术专栏

Python3入门机器学习(二)- Jupyter Notebook与Numpy的使用

测试结果表明,运行了一千次,取有价值的7次,平均每次耗时324+/-5.7 μs(有多少次循环是由Jupyter Notebook自动决定的)

41530
来自专栏武培轩的专栏

剑指Offer-旋转数组的最小数字

package Array; /** * 旋转数组的最小数字 * 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 * 输入一个非递减...

33850
来自专栏小小挖掘机

大过年的,一起来用Seq2Seq来作对联吧!

Seq2Seq全称Sequence to Sequence,在机器翻译、文章摘要等领域有着广泛的应用。其本身很简单,是一个如下图所示的Encoder-Decod...

1.4K80

扫码关注云+社区

领取腾讯云代金券