我有一个关于向量化函数返回的numpy数组的dtype的问题。我的函数返回一个数字,最后是一个分数。奇怪的是,分数的位置似乎影响了返回的dtype。如果函数返回一个分数,我希望类型始终为object
。
import numpy as np
from fractions import Fraction
foo = lambda x: Fraction(1, 3) if x < 0.5 else 1
foo_vectorized = np.vectorize(foo)
foo_vectorized([1, 0.3]) # returns array([1, 0])
foo_vectorized([0.3, 1]) # returns array([Fraction(1, 3), 1], dtype=object)
这是一个错误还是预计会像这样工作?我在Enthought Canopy Python 2.7.6上使用了numpy 1.9.2。
感谢您的解释!
答案 0 :(得分:3)
这与documentation状态完全相同:
&#34;输出类型是通过评估输入的第一个元素来确定的,除非它被指定。&#34;
您可以通过otypes
arg指定所需的输出类型,例如:
np.vectorize(foo, otypes=[np.object])
答案 1 :(得分:1)
这会强制返回值为object
:
foo_vectorized = np.vectorize(foo, otypes=[object])