在2个python对象上向量化一个函数

时间:2017-12-04 05:04:35

标签: python numpy vectorization

我想对一个函数进行向量化,该函数将2个对象作为参数,这样它需要2个ndarray(长度为m和n)并返回一个形状矩阵(m×n)。 有点像张量产品。

我尝试使用numpy.vectorize但没有取得多大成功:

vFunc = np.vectorize(myFunc)
arg1 = np.asmatrix(a)
arg2 = np.transpose(np.asmatrix(b))
test = vFunc(arg1,arg2)

以上不起作用,所以现在我必须迭代其中一个数组,这是一个丑陋的解决方案。我该如何解决这个问题?

vFunc = np.vectorize(myFunc)
arg1 = np.asmatrix(a)
arg2 = np.transpose(np.asmatrix(b))
for i in range(arg1.size): cMat[i,] = vFunc(arg1[i],arg2)

1 个答案:

答案 0 :(得分:1)

这是基本vectorize设置:

In [420]: def myfunc(x,y):
     ...:     return 10*x + y
     ...: 
In [421]: f = np.vectorize(myfunc)
In [422]: f(np.arange(4), np.arange(3)[:,None])
Out[422]: 
array([[ 0, 10, 20, 30],
       [ 1, 11, 21, 31],
       [ 2, 12, 22, 32]])

你的情况有何不同?不要只说'它不起作用'!

使用此特定功能,我甚至不需要vectorize

In [423]: myfunc(np.arange(4), np.arange(3)[:,None])
Out[423]: 
array([[ 0, 10, 20, 30],
       [ 1, 11, 21, 31],
       [ 2, 12, 22, 32]])

myfunc中的操作已在broadcasting

中正常运行

myfunc(np.asmatrix(np.arange(4)), np.asmatrix(np.arange(3)).T)也有效,但不需要转换为矩阵,通常不鼓励。