Numpy объект массив числовых массивов - PullRequest
5 голосов
/ 17 июля 2010

Я хочу создать массив с 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

но мне интересно, нет ли способа написать строки с 3 по 6 в одну строку (тем более, что я могу захотеть объединить 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

У кого-нибудь есть идеи, как этого избежать?

Ответы [ 4 ]

3 голосов
/ 19 июля 2010

Это не совсем красиво, но ...

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
2 голосов
/ 26 января 2015
a = np.array([1,2,3])
b = np.empty(3, dtype='O')
b[:] = [a] * 3

должно хватить.

0 голосов
/ 18 июля 2010

Я не могу найти элегантного решения, но, по крайней мере, более общее решение сделать все вручную - это объявить функцию вида:

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)

Я тогда получаю:

>>> 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
0 голосов
/ 18 июля 2010

Я думаю, что здесь нужен anyarray:

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

не уверен, что случилось с другими 32 битами целых.

Не уверен, поможет ли это, но если вы добавите другой массив другой формы, он преобразуется обратно в нужные вам типы:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...