首页 > 解决方案 > 如何确定 numpy 对象 dtype 中的基础类型?

问题描述

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

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 的某个地方......

标签: pythonnumpy

解决方案


你不能。数组并不意味着(有效地)与非原始类型一起使用,并且实际上与(非常慢的)列表没有什么不同。事实上,一旦你去对象,你可以把任何你想要的东西放入数组中:

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

正如您所看到的 - 如果您没有将原语numpy转换为,则不会执行类型强制。

虽然我根本不推荐数组,但如果你能保证数组包含单一类型,那么

type(arr[0])

确实是您唯一的选择(当然取决于形状)。


推荐阅读