2010-07-17 36 views
5

Tôi muốn tạo một mảng với dtype=np.object, trong đó mỗi phần tử là một mảng có kiểu số, ví dụ: int hoặc float. Ví dụ:Mảng đối tượng nhiều mảng của mảng số

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

Tạo những gì tôi muốn:

>>> print b.dtype 
object 

>>> print b.shape 
(3,) 

>>> print b[0].dtype 
int64 

nhưng tôi tự hỏi liệu có phải là một cách để viết dòng 3-6 trong một dòng (đặc biệt là kể từ khi tôi có thể muốn nối 100 mảng). Tôi cố gắng

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

nhưng điều này thực sự chuyển đổi tất cả các yếu tố để np.object:

>>> print b.dtype 
object 

>>> print b.shape 
(3,) 

>>> print b[0].dtype 
object 

Có ai có bất kỳ ý tưởng làm thế nào để tránh tình trạng này?

Trả lời

3

Nó không phải chính xác khá, nhưng ...

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

Điều này rất hay và ngắn gọn :-) – astrofrog

-1

Tôi nghĩ anyarray là những gì bạn cần ở đây:

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

không chắc chắn những gì đã xảy ra với 32bits khác của ints mặc dù.

Không chắc nếu nó giúp nhưng nếu bạn thêm một loạt các hình dạng khác nhau, nó chuyển đổi trở lại các loại bạn muốn:

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

Đó phải là python của tôi chạy trong 32 bit. – SiggyF

+2

Điều đó dường như không hoạt động, vì b.dtype thuộc loại np.int64, không phải np.object. – astrofrog

0

tôi không thể tìm thấy bất kỳ giải pháp tao nhã, nhưng ít nhất một nhiều giải pháp chung để làm tất cả mọi thứ bằng tay là để khai báo một hàm có dạng:

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

sau đó tôi có thể làm:

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

sau đó tôi nhận được:

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

nên đủ.

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