如果我有一个自定义的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中的某个位置...
答案 0 :(得分:2)
不能。数组不是要(有效地)与非原始类型一起使用,实际上与(非常慢)列表没有区别。实际上,一旦您成为对象,就可以将所需的任何内容放入数组中:
array((Test(),[])) #works fine, dtype object. Even explicitly setting dtype will not fail, and be ignored.
如您所见-如果您不将原始的numpy
转换为,则不会执行任何类型强制。
尽管我完全不建议使用数组,但是如果可以保证数组包含单个类型,那么
type(arr[0])
实际上是您唯一的选择(当然,这取决于形状)。