我正在努力使用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 回答
您的问题与this question中的问题相同 .
np.vectorize
仅适用于将浮动映射到浮点数的函数,而不适用于浮点映射到Numpy数组的函数 .此外,
np.vectorize
不会加速代码执行 . 您可以在函数内创建自己的逻辑来处理列表并使用理解,循环或类似方法返回2D数组 .