2010-07-17 21 views
5

मैं dtype=np.object के साथ एक सरणी बनाना चाहता हूं, जहां प्रत्येक तत्व एक संख्यात्मक प्रकार, जैसे int या float के साथ एक सरणी है। उदाहरण के लिए:संख्यात्मक सरणी की नकली ऑब्जेक्ट सरणी

>>> a = np.array([1,2,3]) 
>>> b = np.empty(3,dtype=np.object) 
>>> b[0] = a 
>>> b[1] = a 
>>> b[2] = a 

बनाता है जो मैं चाहता:

>>> print b.dtype 
object 

>>> print b.shape 
(3,) 

>>> print b[0].dtype 
int64 

लेकिन मैं क्या वहाँ एक तरह से लाइनों एक पंक्ति (खासकर जब से मैं श्रेणीबद्ध करना चाह सकते हैं में 6 को 3 लिखने के लिए नहीं है सोच रहा हूँ 100 सरणी)। मैं

>>> b = np.array([a,a,a],dtype=np.object) 

कोशिश की, लेकिन यह वास्तव में सभी तत्वों np.object में धर्मान्तरित:

>>> print b.dtype 
object 

>>> print b.shape 
(3,) 

>>> print b[0].dtype 
object 

किसी को भी किसी भी विचार कैसे इस से बचने के लिए है?

उत्तर

3

यह बिल्कुल सुंदर नहीं है, लेकिन ...

import numpy as np 

a = np.array([1,2,3]) 
b = np.array([None, a, a, a])[1:] 

print b.dtype, b[0].dtype, b[1].dtype 
# object int32 int32 
+0

यह अच्छा और संक्षिप्त है :-) – astrofrog

-1

मुझे लगता है कि anyarray आप यहाँ क्या जरूरत है:

b = np.asanyarray([a,a,a]) 
>>> b[0].dtype 
dtype('int32') 

यकीन नहीं क्या हालांकि ints के अन्य 32bits हुआ। कम से कम एक और अधिक

import numpy as np 
a = np.array([1,2,3]) 
b = np.array([1,2,3,4]) 
b = np.asarray([a,b,a], dtype=np.object) 
print(b.dtype) 
>>> object 
print(b[0].dtype) 
>>> int32 
+0

यह मेरी पाइथन 32 बिट में चलाना चाहिए। – SiggyF

+2

यह काम नहीं प्रतीत होता है, क्योंकि b.dtype प्रकार np.int64 है, np.object नहीं। – astrofrog

0

मैं किसी भी सुरुचिपूर्ण समाधान नहीं मिल सकता है, लेकिन:

सुनिश्चित नहीं हैं कि अगर यह मदद करता है, लेकिन यदि आप एक अलग आकार का एक और सरणी जोड़ने के लिए, इसे वापस प्रकार आप चाहते हैं करने के लिए धर्मान्तरित हाथ से सब कुछ करने के लिए सामान्य समाधान प्रपत्र के एक समारोह की घोषणा करने के लिए है:

def object_array(*args): 
    array = np.empty(len(args), dtype=np.object) 
    for i in range(len(args)): 
     array[i] = args[i] 
    return array 

मैं तो कर सकते हैं:

a = np.array([1,2,3]) 
b = object_array(a,a,a) 
,210

मैं तो मिलती है:

>>> a = np.array([1,2,3]) 
>>> b = object_array(a,a,a) 
>>> print b.dtype 
object 
>>> print b.shape 
(3,) 
>>> print b[0].dtype 
int64 
2
a = np.array([1,2,3]) 
b = np.empty(3, dtype='O') 
b[:] = [a] * 3 

पर्याप्त होना चाहिए।

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