Python 如何使用numpy.vectorize或numpy.frompyfunc

Python 如何使用numpy.vectorize或numpy.frompyfunc,python,numpy,vectorization,Python,Numpy,Vectorization,[编辑:我对这个示例进行了一些梳理,因此我没有很好地清理代码。我的问题更多的是,如何将子数组传递到numpy.vectorize-d函数中,而不是专门针对这个示例。] 我不知道如何使用numpy.vectorize或numpyfunc对以数组为参数的命令进行向量化 让我们想想这个简单的例子(我知道这是一个非常基本的例子,我根本不需要使用numpy.vectorize。我只是想举个例子): 我想矢量化一个函数,它把aa和bb的每个子数组的第二个元素相加。在本例中,我想返回[202 203 206

[编辑:我对这个示例进行了一些梳理,因此我没有很好地清理代码。我的问题更多的是,如何将子数组传递到numpy.vectorize-d函数中,而不是专门针对这个示例。]

我不知道如何使用numpy.vectorize或numpyfunc对以数组为参数的命令进行向量化

让我们想想这个简单的例子(我知道这是一个非常基本的例子,我根本不需要使用numpy.vectorize。我只是想举个例子):

我想矢量化一个函数,它把aa和bb的每个子数组的第二个元素相加。在本例中,我想返回[202 203 206 210]的数组

但是这样的代码不起作用:

def vec2(bsub, asub):
    return bsub[1] + asub[1]

func2 = np.vectorize(vec2)
func2( bb, aa )
与numpy类似的事情。frompyfunc没有运气


我的问题是,如何将子数组列表转换为numpy.vectorize-d函数,并让每个子数组成为函数的参数

您的问题之一是aa和bb是列表,而不是
numpy.array()
。你应该做:

aa = np.array([[1,2,3,4], [2,3,4,5], [5,6,7,8], [9,10,11,12]])
bb = np.array([[100,200,300,400], [100,200,300,400], [100,200,300,400], [100,200,300,400]])
我注意到的第二件事是,要获得每个子数组的第二个元素,需要
aa[:,1]
,而不是
aa[2]

第三,你的
vec2
函数应该
返回一些东西,而不仅仅是
打印

最后一个问题是
vec2
函数应该对整数而不是数组进行操作,并且应该将切片传递给函数,而不是完整的数组。更正版本(返回预期输出)为:


请注意OP帖子上的编辑,这使得这个答案看起来有点奇怪。

你的问题之一是aa和bb是列表,而不是
numpy.array()。你应该做:

aa = np.array([[1,2,3,4], [2,3,4,5], [5,6,7,8], [9,10,11,12]])
bb = np.array([[100,200,300,400], [100,200,300,400], [100,200,300,400], [100,200,300,400]])
我注意到的第二件事是,要获得每个子数组的第二个元素,需要
aa[:,1]
,而不是
aa[2]

第三,你的
vec2
函数应该
返回一些东西,而不仅仅是
打印

最后一个问题是
vec2
函数应该对整数而不是数组进行操作,并且应该将切片传递给函数,而不是完整的数组。更正版本(返回预期输出)为:


请注意OP帖子上的编辑,这让这个答案看起来有点奇怪。

谢谢您的评论。我对这个例子进行了梳理,所以我没有很好地清理代码。我的问题更多的是,如何将子数组传递到numpy.vectorize-d函数中,而不是特别关于这个示例。您正在将子数组传递到矢量化函数中。。。您认为哪些操作不是通过上述方法完成的?也许它应该进入一个新的,更清晰的问题。谢谢你的评论。我对这个例子进行了梳理,所以我没有很好地清理代码。我的问题更多的是,如何将子数组传递到numpy.vectorize-d函数中,而不是特别关于这个示例。您正在将子数组传递到矢量化函数中。。。您认为哪些操作不是通过上述方法完成的?也许它应该进入一个新的,更清晰的问题。
import numpy as np
aa = np.array([[1,2,3,4], [2,3,4,5], [5,6,7,8], [9,10,11,12]])
bb = np.array([[100,200,300,400], [100,200,300,400], [100,200,300,400], [100,200,300,400]])

def vec2(a, b):
    return a + b

func2 = np.vectorize(vec2)
print func2(bb[:,1], aa[:,1])