2010-05-17 3 views
8

Ich mag würde eine Klasse machen, den numpy-Array-Basistyp erstreckt,Wie wickelt man numpy Array-Typen?

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

Aber anscheinend, es wird nicht mehrdimensionale Array-Typen ermöglichen. Gibt es einen Weg dahin? Danke im Voraus!

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

Antwort

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]] 

können Sie wollen auch this guide Weitere Informationen lesen, wie ndarray Unterklasse.

+0

Das sieht gut aus; Die numpy.empty.view (LemmaMatrix) scheint ebenfalls gut zu sein. Vielen Dank! :) – gatoatigrado

+0

Eine kleine Sache - warum nicht $ Größe statt $ Daten? Es sind die Dimensionen, nicht die Werte, klar? – gatoatigrado

+0

@gatoatigrado: Auf jeden Fall könnten Sie etwas wie 'np.array (data) .size' verwenden. Ich vermute - vielleicht falsch - was Sie wollten. – unutbu