子类化numpy标量类型

Sor*_*ren 6 python numpy subclass user-defined-types

我试图子类numpy.complex64,以利用方式numpy的商店的数据,(连续,交替的实部和虚部),但用我自己的__add__,__sub__...例程.

我的问题是,当我做一个numpy.ndarray,设置dtype=mysubclass,我得到一个numpy.ndarraydtype='numpy.complex64'在代替,导致numpy的不是用我自己的功能添加,删减等.

例:

import numpy as np
class mysubclass(np.complex64):
    pass

a = mysubclass(1+1j)
A = np.empty(2, dtype=mysubclass)

print type(a)
print repr(A)
Run Code Online (Sandbox Code Playgroud)

输出:

<class '__main__.mysubclass'>
array([ -2.07782988e-20 +4.58546896e-41j,  -2.07782988e-20 +4.58546896e-41j], dtype=complex64)'
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?

提前谢谢 - 索伦

eca*_*mur 3

NumPy 类型系统仅设计为通过函数从 C 扩展PyArray_RegisterDataType。或许可以使用 ctypes 从 Python 访问此功能,但我不推荐这样做;最好用 C 或 Cython 编写扩展,或者ndarray像 @seberg 描述的那样编写子类。

NumPy 源代码树中有一个简单的示例 dtype:newdtype_example/floatint.c。如果您喜欢 Pyrex, pytables 源代码中的reference.pyx可能值得一看。