8

I'd like to make a class extending the numpy array base type,

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

But apparently, it will not allow multi-dimensional array types. Is there a way around this? Thanks in advance!

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

1 Answer 1

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

You may also want read this guide for more information on how to subclass ndarray.

Sign up to request clarification or add additional context in comments.

3 Comments

That looks great; the numpy.empty.view(LemmaMatrix) also seems good. Thanks! :)
One minor thing -- why not $size instead of $data? It is the dimensions, not the values, clearly?
@gatoatigrado: By all means, you could use something like np.array(data).size. I was guessing -- perhaps incorrectly -- what you wanted.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.