如何解决从 numpy.dtype 为结构化数组创建自己的类型获得这个的最干净的方法是什么?
我想像这样从 numpy.dtype
派生一个自己的类:
import numpy as np
class A(np.dtype):
def __new__(cls):
cls.fields = [("field1",np.int32),("field2"),np.int64)]
但是,numpy
不会让我这样做:
type 'numpy.dtype' 不是可接受的基本类型
因此我开始摆弄元类。但是,我的代码没有使用 name,bases,dct
。这基本上可以吗?我的意思是,它有效,但这是一个好方法吗?
class NumpyDType_Meta(type):
def __new__(cls,name,dct,**args):
return np.dtype(**args)
class A(metaclass = NumpyDType_Meta,dtype = [("field1",np.int64)]):
pass
arr = np.array([[1,2],[3,4]],dtype = A)
arr
array([[(1,1),(2,2)],[(3,3),(4,4)]],dtype=[('field1','<i4'),('field2','<i8')])
解决方法
您不需要在那里创建另一个“dtype”类 - 只需一个 dtype 实例。
事实上,您在元类领域的旅程就是这样做的 - 当您的 __new__
方法返回一个 dtype 实例时,它取代了您正文中的 class A
语句。当您将 **args
传递给 dtype 构造函数,并且您将规范作为“dtype”关键字参数传递给类时,它恰好可以工作。
但是直到 arr
声明为止的所有代码都与简单地执行相同:
A = np.dtype([("field1",np.int32),("field2",np.int64)])
这会为您的子字段创建一个新的 dtype,这正是您所需要的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。