2010-05-17 41 views
8

我想使延伸的numpy的阵列基本类型的类,如何包装numpy数组类型?

class LemmaMatrix(numpy.ndarray): 
    @classmethod 
    def init_from_corpus(cls, ...): cls(numpy.empty(...)) 

但很显然,它将不允许多维数组类型。有没有解决的办法?提前致谢!

ndarray(empty([3, 3])) 
TypeError: only length-1 arrays can be converted to Python scalars 

回答

4
import numpy as np 
class LemmaMatrix(np.ndarray): 
    def __new__(subtype,data,dtype=None): 
     subarr=np.empty(data,dtype=dtype) 
     return subarr 

lm=LemmaMatrix([3,3]) 
print(lm) 
# [[ 3.15913337e-260 4.94951870e+173 4.88364603e-309] 
# [ 1.63321355e-301 4.80218258e-309 2.05227026e-287] 
# [ 2.10277051e-309 2.07088188e+289 7.29366696e-304]] 

您可能还需要对如何继承ndarray更多信息,请阅读this guide

+0

这看起来不错; numpy.empty.view(LemmaMatrix)也很好。谢谢! :) – gatoatigrado 2010-05-18 01:59:05

+0

一件小事 - 为什么不是$尺寸而不是$数据?清楚的是尺寸而不是价值? – gatoatigrado 2010-05-18 02:01:54

+0

@gatoatigrado:无论如何,你可以使用类似'np.array(data).size'的东西。我猜测 - 也许是错误的 - 你想要什么。 – unutbu 2010-05-18 02:09:32