python - 如何确定 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 的某个地方......
解决方案
你不能。数组并不意味着(有效地)与非原始类型一起使用,并且实际上与(非常慢的)列表没有什么不同。事实上,一旦你去对象,你可以把任何你想要的东西放入数组中:
array((Test(),[])) #works fine, dtype object. Even explicitly setting dtype will not fail, and be ignored.
正如您所看到的 - 如果您没有将原语numpy
转换为,则不会执行类型强制。
虽然我根本不推荐数组,但如果你能保证数组包含单一类型,那么
type(arr[0])
确实是您唯一的选择(当然取决于形状)。
推荐阅读
- c# - 在 ASP.NET MVC 控制器方法中实例化 WinForm 的缺点
- typescript - 只在声明文件中为 Typescript 文件定义接口是典型的吗?
- ios - 为什么我在 Swift 中看不到图像?
- huawei-mobile-services - com.huawei.trustspace 错误,11 不合法。我想在安全屏幕上访问 TrustSpace
- php - MySql:从表中选择 * > 并获取受影响的行或选择计数(*)
- javascript - 为什么 document.getElementsByName 返回 NodeList 而 document.getElementsByClassName 返回 HTMLCollection?
- javascript - 单个函数的所有小计的总和
- android - 如果我通过 Firebase 云功能使用数据消息发送,为什么不显示通知?
- git - GIT:本地分支上的 For 循环
- java - Citrus-Framework:根据状态码进行条件验证