Numpy 数值数组的对象数组
我想创建一个数组,类型是 dtype=np.object
,其中每个元素都是一个数字类型的数组,比如整数或浮点数。举个例子:
>>> 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
我找不到什么优雅的解决办法,但至少有一个更通用的方法可以手动完成所有操作,那就是声明一个这样的函数:
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
a = np.array([1,2,3])
b = np.empty(3, dtype='O')
b[:] = [a] * 3
应该足够了。
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