Numpy 学习:数组的向量化、apply、栅格、查找

向量化表示对数组进行向量化操作,apply表示在某一个维度上应用函数,而栅格用于生产网格化数据。

一,vectorize 向量化

numpy.vectorize()函数定义一个向量化函数,它以序列或numpy数组作为输入,对numpy数组做向量化操作。函数输出的数据类型是由otypes参数确定的,如果otypes=None,那么输出的数据类型是通过使用输入的第一个元素调用函数来确定的,该函数返回一个函数对象。

numpy.vectorize(pyfunc, otypes=None, doc=None, excluded=None, cache=False, signature=None)

参数注释:

  • pyfunc:函数对象
  • otype:输出数据的类型(putput data type)

使用vectorize()定义一个向量化函数,对数组做向量化操作:

def myfunc(a, b):
    return a-b if a>b else a+b

vfunc = np.vectorize(myfunc)
vfunc([1, 2, 3, 4], 2)
#output array([3, 4, 1, 2])

二,apply族函数

沿着特定的维度,在一维数组切片上应用函数:

numpy.apply_along_axis(func1d, axis, arr, *args, **kwargs)

举个例子,传递的一维数组是列,按照列值计算两个端点的均值:

>>> def my_func(a):
...     """Average first and last element of a 1-D array"""
...     return (a[0] + a[-1]) * 0.5
>>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>> np.apply_along_axis(my_func, 0, b)
array([4., 5., 6.])

三,栅格数据

对于mgrid()函数,用于生成多维数据,参数是一个序列,常用于生成1维,2维和3维数据:

np.mgrid[ 第1维,第2维 ,第3维 , …] 

第n维的书写形式为:

start:end:step

如果step为整数,表示间隔,左闭右开;如果step为 int + j,表示点数,左闭右闭。

对于np.meshgrid()用于生成网格型数据,接受两个一维数组生成两个二维矩阵,对应两个数组中所有的(x,y)对。

np.meshgrid(x, y)

 

参考文档:

numpy Routines

posted @ 2021-07-29 13:04  悦光阴  阅读(3728)  评论(0编辑  收藏  举报