【发布时间】:2018-11-07 10:42:15
【问题描述】:
我正在使用 np.vectorize 处理这段代码 sn-p
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(最后一次调用)
在 ()
----> 1 coords1 = vec_to_homo([0,1])/home/lib/python2.7/site-packages/numpy/lib/function_base.pyc in 调用(self, *args, **kwargs)
第2753章 vargs.extend([kwargs[_n] for _n in names])
2754
-> 2755 返回 self._vectorize_call(func=func, args=vargs)
2756
第2757章/home/lib/python2.7/site-packages/numpy/lib/function_base.pyc in _vectorize_call(self, func, args)
2832
2833 如果 ufunc.nout == 1:
-> 2834 res = 数组(输出,copy=False,subok=True,dtype=otypes[0])
第2835章:
2836 res = tuple([数组(x,copy=False,subok=True,dtype=t)ValueError:使用序列设置数组元素。
我了解错误消息,但我终其一生都无法找到应该如何更改函数/调用矢量化来解决此问题。
如果我只传递一个整数,该函数会产生正确的结果,即vec_to_homo(0) 产生[0,1]。
我的 sn-p 与上面链接的文档中提供的示例非常接近,所以我真的不明白出了什么问题。
请帮忙。
谢谢!
【问题讨论】:
-
您没有说出您对
vectorized结果的期望。要使用返回数组的函数,vectorize需要otypes=[object]或signature参数。将标量以外的任何内容传递给您的函数需要signature。总的来说,vectorize是一个笨拙的拐杖——偶尔有用,但很容易误用。
标签: python numpy vectorization