首页 文章

正确使用numpy.vecotrize

提问于
浏览
1

我正在努力使用np.vectorize这个代码片段

def to_homogenous(x):
'''
Convert a point x to homogenous coordinates.
'''
return np.hstack((x,np.array([1]))).flatten()

vec_to_homo = np.vectorize(to_homogenous)
coords = vec_to_homo([0,1])

这会导致以下错误:

ValueErrorTraceback(最近一次调用last)in()----> 1 coords1 = vec_to_homo([0,1])/home/lib/python2.7/site-packages/numpy/lib/function_base.pyc in call( self,* args,** kwargs)2753 vargs.extend([kwargs [_n] for _n in names])2754 - > 2755 return self._vectorize_call(func = func,args = vargs)2756 2757 def _get_ufunc_and_otypes(self,func ,参数):在_vectorize_call(个体,FUNC /home/lib/python2.7/site-packages/numpy/lib/function_base.pyc,参数)2832 2833如果ufunc.nout == 1: - > 2834个解析度=阵列(输出,copy = False,subok = True,dtype = otypes [0])2835 else:2836 res = tuple([array(x,copy = False,subok = True,dtype = t)ValueError:设置数组元素序列 .

我理解错误信息,但我不能为我的生活找到我应该如何改变我的功能/调用vectorize来解决这个问题 . 如果我只传递一个整数,该函数会产生正确的结果,即 vec_to_homo(0) 产生 [0,1] .

我的代码片段非常接近上面链接的文档中提供的示例,所以我真的不知道出了什么问题 .

请帮忙 .
谢谢!

1 回答

  • 2

    您的问题与this question中的问题相同 . np.vectorize 仅适用于将浮动映射到浮点数的函数,而不适用于浮点映射到Numpy数组的函数 .

    此外, np.vectorize 不会加速代码执行 . 您可以在函数内创建自己的逻辑来处理列表并使用理解,循环或类似方法返回2D数组 .

相关问题