2010-05-17 13 views
8

me gustaría hacer una clase que se extiende del tipo matriz base numpy,¿Cómo se envuelven los tipos de matriz numpy?

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

Pero, al parecer, no va a permitir que los tipos de matriz multi-dimensionales. ¿Hay alguna forma de evitar esto? ¡Gracias por adelantado!

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

Respuesta

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

Usted también puede querer leer this guide para obtener más información sobre cómo crear subclases ndarray.

+0

Eso se ve genial; el numpy.empty.view (LemmaMatrix) también parece bueno. ¡Gracias! :) – gatoatigrado

+0

Una cosa menor: ¿por qué no $ size en lugar de $ data? Son las dimensiones, no los valores, claramente? – gatoatigrado

+0

@gatoatigrado: De todos modos, podría usar algo como 'np.array (data) .size'. Estaba adivinando, quizás incorrectamente, lo que querías. – unutbu

Cuestiones relacionadas