4

我需要编写一个函数 F,它接受一个 dtype=object 的 numpy 数组,并返回数组的所有元素是浮点数、整数还是字符串。例如:

F(np.array([1., 2.], dtype=object))  --> float
F(np.array(['1.', '2.'], dtype=object))  --> string
F(np.array([1, 2], dtype=object))  --> int
F(np.array([1, 2.], dtype=object))  --> float
F(np.array(['hello'], dtype=object))  --> string

F(np.array([1, 'hello'], dtype=object))  --> ERROR

任何想法如何有效地做到这一点?(== 带有 numpy 内置函数)

非常感谢

4

2 回答 2

4

可能最简单的是运行内容np.array并检查结果类型:

a = np.array([1., 2.], dtype=object)
b = np.array(['1.', '2.'], dtype=object)
c = np.array([1, 2], dtype=object)
d = np.array([1, 2.], dtype=object)
e = np.array(['hello'], dtype=object)
f = np.array([1, 'hello'], dtype=object)

>>> np.array(list(a)).dtype
dtype('float64')
>>> np.array(list(b)).dtype
dtype('S2')
>>> np.array(list(c)).dtype
dtype('int32')
>>> np.array(list(d)).dtype
dtype('float64')
>>> np.array(list(e)).dtype
dtype('S5')

如果类型不兼容,它不会引发错误,因为这不是 numpy 的行为:

>>> np.array(list(f)).dtype
dtype('S5')
于 2013-10-21T05:24:10.373 回答
1

不确定这是对象管理最有效的方法,但是如何:

def F(a):
    unique_types = set([type(i) for i in list(a)])
    if len(unique_types) > 1:
        raise ValueError('data types not consistent')
    else:
        return unique_types.pop()
于 2013-10-21T05:45:07.827 回答