添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

首先看一下文档:

numpy.vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, signature=None)
Parameters:	
pyfunc :python函数或方法
otypes : 输出数据类型。必须将其指定为一个typecode字符串或一个数据类型说明符列表。每个输出应该有一个数据类型说明符。
doc : 函数的docstring。如果为None,则docstring将是 pyfunc.__doc__。
excluded : 表示函数不会向量化的位置或关键字参数的字符串或整数集。这些将直接传递给未经修改的pyfunc
cache :如果为True,则缓存第一个函数调用,该函数调用确定未提供otype的输出数。
signature : 广义通用函数签名,例如,(m,n),(n)->(m)用于矢量化矩阵 - 向量乘法。如果提供的话,pyfunc将调用(并期望返回)具有由相应核心维度的大小给出的形状的数组。默认情况下,pyfunc假定将标量作为输入和输出。
Returns:	
vectorized :向量化的数组

实例如下:

1.1 将函数向量化
def myfunc(a, b):
...     "Return a-b if a>b, otherwise return a+b"
...     if a > b:
...         return a - b
...     else:
...         return a + b
vfunc = np.vectorize(myfunc)
vfunc([1, 2, 3, 4], 2)
Out[87]: array([3, 4, 1, 2])
1.2 函数的docstring,如果没有定义,则用函数本身的,当然可以自定义
def myfunc(a, b):
...     "Return a-b if a>b, otherwise return a+b"
...     if a > b:
...         return a - b
...     else:
...         return a + b
vfunc = np.vectorize(myfunc)
vfunc.__doc__
Out[92]: 'Return a-b if a>b, otherwise return a+b'
vfunc = np.vectorize(myfunc, doc='Vectorized `myfunc`')
vfunc.__doc__
Out[93]: 'Vectorized `myfunc`'
1.3 输出类型是通过计算输入的第一个元素来确定的,除非它被指定
out = vfunc([1, 2, 3, 4], 2)
print(type(out[0]))
vfunc = np.vectorize(myfunc, otypes=[float])
out = vfunc([1, 2, 3, 4], 2)
print(type(out[0]))
<class 'numpy.int32'>
<class 'numpy.float64'>
1.4 用excluded可以用来防止对某些参数矢量化,这对于固定长度的类似数组的参数很有用,例如多项式的系数
def mypolyval(p, x):
...     _p = list(p)
...     res = _p.pop(0)
...     while _p:
...         res = res*x + _p.pop(0)
...     return res
>>> vpolyval = np.vectorize(mypolyval, excluded=['p'])
>>> vpolyval(p=[1, 2, 3], x=[0, 1])
Out[96]: array([3, 6])
1.5 签名参数允许矢量化作用于固定长度的非标量数组的函数。例如,您可以将其用于Pearson相关系数及其p值的矢量化计算
import scipy.stats
pearsonr = np.vectorize(scipy.stats.pearsonr,signature='(n),(n)->(),()')
pearsonr([[0, 1, 2, 3]], [[1, 2, 3, 4], [4, 3, 2, 1]])
Out[100]: (array([ 1., -1.]), array([0., 0.]))
pearsonr([[0, 1, 2, 3]], [[1, 2, 3, 4]])
Out[101]: (array([1.]), array([0.]))
                                    1、向量化1000倍的速度听起来很夸张。Python并不以速度著称。这是真的吗?当然有可能 ,关键在于你如何操作!如果在数据上使用for循环,则完成所需的时间将与数据的大小成比例。但是还有另一种方法可以在很短的时间内得到相同的结果,那就是向量化。这意味着要花费15秒的时间来编写代码,并且在15毫秒的时间内跑出结果。当然,根据数据集的不同,库文件、硬件版本的不同,所以实际结果可能会有所不同。那么什么...
                                    http://deepdish.io/2015/04/28/creating-lmdb-in-python/http://nbviewer.jupyter.org/github/joyofdata/joyofdata-articles/blob/master/deeplearning-with-caffe/Neural-Networks-with-Caffe-on-the-GPU.ipynbhttp
                                    同步于https://www.runblog.online/2019/03/18/increase-calculation-speed-with-numpy-vectorize/
在实际项目中,对超大矩阵进行计算或者对超大的DataFrame进行计算是一个经常会出现的场景。这里先不考虑开发机本身内存等客观硬件因素,仅从设计上讨论一下不同实现方式带来的性能差异,抛砖引玉。
项目中有这样一个需...
                                    函数功能
numpy.vectorize函数可以实现任意函数向量化,从而避免在python使用循环,提高效率。另外,用好函数的signature参数,可以让本来就是处理向量的函数按照自己的需求对向量的向量进行批量化处理(见下面的例子),可以说非常方便。官方链接如下:https://numpy.org/doc/stable/reference/generated/numpy.vectorize.html
下面,以不同类型的加法为例来进行实验和分析。
通过对如下函数进行向量化来实现不同类型的加法效果。
                                    numpy.vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, signature=None)
用法:np.vectorize(函数)(待函数处理的数据)
Parameters: 
   pyfunc:python函数或方法
   otypes:输出数据类型。必须将其指定为一个typecode字符串或一个数据类型说明符列表。每个输出应该有一个数据类型说明符。
  doc:函数的docstrin...
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        if(array.length==0){
                                    通用函数也可以称为 ufunc, 是一种在 ndarray 数据中进行逐元素操作的函数。某些简单函数接受了一个或者多个标量数值,并产生一。介绍一下二元通用函数:比如 add 和 maximum 则会接受两个数组并返回一个数组结尾结果,所以叫做二元通用函数。个或多个标量结果,而通用函数就是对这些简单函数向量化封装。
                                    首先看一下文档:
numpy.vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, signature=None)
Parameters:	
pyfunc :python函数或方法
otypes : 输出数据类型。必须将其指定为一个typecode字符串或一个数据类型说明符列表。每个输出应该有一个数据类型说明符...
                                    广义函数类。定义一个矢量化函数,该函数将对象或numpy数组的嵌套序列作为输入,并返回单个numpy数组或numpy数组的元组。除了使用numpy的广播规则外,矢量化函数会像python map函数一样在输入数组的连续元组上评估pyfunc。向量化输出的数据类型是通过使用输入的第一个元素调用函数来确定的。通过指定otypes参数可以避免这种情况。参数:pyfunc: : callablepytho...
                                    此文章的需求来自:逻辑回归的算法实现,numpy.frompyfunc()函数使用1.什么是函数向量化1.1函数的一般使用我们有如下的一个自定义函数def magic(a, b):
    if a &gt; b:
        return a + b
    else:
        return a - b使用时我们只能单变量传入调用a = 1
b = 2
ret = mag...