2010-05-17 28 views
8

Tôi muốn tạo ra một lớp mở rộng NumPy loại cơ sở mảng,Làm thế nào để bọc các loại mảng có nhiều mảng?

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

Nhưng dường như, nó sẽ không cho phép các loại mảng đa chiều. Có cách nào để giái quyết vấn đề này không? Cảm ơn trước!

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

Trả lời

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

Bạn cũng có thể muốn đọc this guide để biết thêm thông tin về làm thế nào để phân lớp ndarray.

+0

Điều đó có vẻ tuyệt vời; các numpy.empty.view (LemmaMatrix) cũng có vẻ tốt. Cảm ơn! :) – gatoatigrado

+0

Một điều nhỏ - tại sao không phải là $ size thay vì $ data? Đó là kích thước, không phải là giá trị, rõ ràng? – gatoatigrado

+0

@gatoatigrado: Bằng mọi cách, bạn có thể sử dụng một cái gì đó như 'np.array (dữ liệu) .size'. Tôi đã đoán - có lẽ không chính xác - những gì bạn muốn. – unutbu

Các vấn đề liên quan