如何确定numpy对象dtype中的基础类型?

时间:2018-06-20 09:11:45

标签: python numpy

如果我有一个自定义的python类,并在numpy.ndarray中使用它,则我的数组以dtype'O'(对象)结尾,这很好:

import numpy

class Test(object):
    """Dummy class
    """
    def __init__(self, value):
        self.value = value

    def __float__(self):
        return float(self.value)


arr = numpy.array([], dtype=Test)

这给了我array([], dtype=object),但是如何解开dtype以检查基础类型是否为Test

当数组中有元素时,这很容易,因为我可以在任何成员上使用isinstance,但是当数组为空时,我很困惑。我希望基础类型存储在dtype中的某个位置...

1 个答案:

答案 0 :(得分:2)

不能。数组不是要(有效地)与非原始类型一起使用,实际上与(非常慢)列表没有区别。实际上,一旦您成为对象,就可以将所需的任何内容放入数组中:

array((Test(),[])) #works fine, dtype object. Even explicitly setting dtype will not fail, and be ignored.

如您所见-如果您不将原始的numpy转换为,则不会执行任何类型强制。

尽管我完全不建议使用数组,但是如果可以保证数组包含单个类型,那么

type(arr[0])

实际上是您唯一的选择(当然,这取决于形状)。