从具有适当形状的现有可迭代对象创建 的 3D numpy 数组



我有一个 M 个样本数组每个样品的形状为:(11, 64(所以理论上我的主数组应该有一个形状 (M, 11, 64(但我得到的只是(m,(作为形状

我尝试了np.array(main_array(,但这没有任何作用。我想知道是否有办法让 numpy 意识到它使用的数据的维度。

我获取数据的方式是按以下方式使用熊猫:

main_array = data['source_info'].apply(func_to_create_2d_array_for_each_row).values

np.array不会"展平"对象dtype数组。 你必须使用某种连接。

创建一个数组数组。 请注意,我玩了一些游戏来绕过创建 3d 数组np.array's偏好:

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)

stackarr视为列表,并将元素联接在新轴上。 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.

最新更新