2010-05-17 19 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 (लेम्मामैट्रिक्स) भी अच्छा लगता है। धन्यवाद! :) – gatoatigrado

+0

एक मामूली चीज़ - $ डेटा के बजाय $ आकार क्यों नहीं? यह आयाम है, मान नहीं, स्पष्ट रूप से? – gatoatigrado

+0

@gatoatigrado: हर तरह से, आप 'np.array (डेटा) .size' जैसे कुछ का उपयोग कर सकते हैं। मैं अनुमान लगा रहा था - शायद गलत - जो आप चाहते थे। – unutbu

संबंधित मुद्दे