如何强制numpy将其元素视为对象

brjng4g3  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(91)

我有一个连接到某个数据库的库,作为存储数据的选项之一,我有一个数组。这个库的编码方式使我不能使用n维数组。
假设我想存储一些int32,我会这样做:

np.array([1, 2, 3], dtype=np.int32)

字符串
假设我想存储一些double数组,我可以这样做:

np.array([np.array([1., 2., 3.]), np.array([4., 5.])], dtype=object)


因为结果不会产生n维数组,而是一个数组的数组:

array([array([1., 2., 3.]), array([4., 5.])], dtype=object)


然而,每当我把所有的数组都做成相同的形状时:

np.array([np.array([1., 2., 3.]), np.array([4., 5., 6.])], dtype=object)


结果是:

array([[1.0, 2.0, 3.0],
       [4.0, 5.0, 6.0]], dtype=object)


我想:

array([array([1., 2., 3.]), array([4., 5., 6.])], dtype=object)


因为这是库会接受的。我理解numpy为什么做这样的优化,但是我想重写它。

q43xntqr

q43xntqr1#

感谢@hpaulj:
创建一个空的对象数组,然后将元素分配给数组:

import numpy as np

array = np.empty((2,), object)
array[0] = np.array([1., 2., 3.])
array[1] = np.array([4., 5., 6.])

print(array)

字符串
给出:

array([array([1., 2., 3.]), array([4., 5., 6.])], dtype=object)


更新:由于一些评论提到了它,我想把它也包括在这里。要一次设置所有元素,你可以这样做:

array[:] = list(np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]))

相关问题