数值数组的Numpy对象数组

时间:2010-07-17 19:55:56

标签: python arrays numpy

我想用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 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

a = np.array([1,2,3])
b = np.empty(3, dtype='O')
b[:] = [a] * 3

应该足够了。

答案 2 :(得分: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)
然后我得到:

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

答案 3 :(得分:-1)

我认为在这里你需要的是任何颜色:

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