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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从具有适当形状的现有迭代中创建3D numpy数组相关的知识,希望对你有一定的参考价值。

我有一个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
答案

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)

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

以上是关于从具有适当形状的现有迭代中创建3D numpy数组的主要内容,如果未能解决你的问题,请参考以下文章

试图从一个 np 数组中创建一个可读的 txt 文件,全部打印在一行上?

从字典列表中创建NumPy记录数组的最简单方法?

numpy with python:将3d数组转换为2d

从 3D Numpy 数组的一维切片 [重复]

Hive 从现有表中创建具有复杂类型的新表

水平堆栈2d Numpy阵列与3d Numpy阵列