我有一组M个样本 每个样本的形状为:(11,64) 所以理论上我的主阵列的形状应该是(M,11,64) 但我得到的是(m,)作为形状
我尝试了np.array(main_array),但这并没有做任何事情。 我想知道是否有任何方法让numpy意识到它使用的数据的维度。
我获取数据的方式是以下列方式使用pandas:
main_array = data['source_info'].apply(func_to_create_2d_array_for_each_row).values
答案 0 :(得分:1)
np.array
不会'展平'对象dtype数组。你必须使用某种连接。
创建一个数组数组。请注意,我玩了一些游戏来绕过np.array's
首选项来创建一个3d数组:
In [5]: arr = np.empty((3,), dtype=object)
In [6]: arr
Out[6]: array([None, None, None], dtype=object)
In [7]: arr[:] = [np.zeros((2,3)) for _ in range(3)]
In [8]: arr
Out[8]:
array([array([[0., 0., 0.],
[0., 0., 0.]]),
array([[0., 0., 0.],
[0., 0., 0.]]),
array([[0., 0., 0.],
[0., 0., 0.]])], dtype=object)
另一个np.array
来电没有做任何事情
In [9]: np.array(arr)
Out[9]:
array([array([[0., 0., 0.],
[0., 0., 0.]]),
array([[0., 0., 0.],
[0., 0., 0.]]),
array([[0., 0., 0.],
[0., 0., 0.]])], dtype=object)
stack
将arr
视为列表,并将元素连接到新轴上。 concatenate
将它们连接到现有轴上。
In [10]: np.stack(arr)
Out[10]:
array([[[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.]]])
In [11]: np.concatenate(arr, axis=0)
Out[11]:
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
如果arr
的一个或多个元素的形状不同,那么这将不起作用。
np.array((np.zeros((2,3)), np.zeros((3,2))))
毫不费力地创建了一个对象数组 - 可能是一个错误。它不能是stacked
。