我有一个包含40个数组的数组,每个数组的形状为1x150。有没有办法重塑数组,以便我有40个3x50数组的数组?
我不确定是否有办法使用np.reshape而只是在一行中进行,是吗?
答案 0 :(得分:2)
这真的是array
np.arrays,还是那些数组的列表?如果它是一个数组,它的形状和dtype是什么?
如果它是列表或带有dtype=object
的数组,那么您必须迭代项目,并重新整形每个项目。
[a.reshape(3,50) for a in A]
如果您有一个3d数组,其形状可能是(40, 1, 150)
。
A.reshape(40, 3, 50)
由于'object'数组中的项可以是任何东西 - 字符串,数组,列表,dict - 所以不能同时适用于所有这些项的reshape
。即使它们都是阵列,它们也可以具有不同的尺寸。实际上,通常是如何生成数组数组。
In [5]: np.array([[1,2,3],[2,3]])
Out[5]: array([[1, 2, 3], [2, 3]], dtype=object)
您必须采取特殊步骤来构造具有全部具有相同形状的项目的对象数组。 np.array
尝试构建它可以的最高维数组。
In [7]: A=np.empty((2,),dtype=object)
In [8]: A[0] = np.array([1,2,3])
In [9]: A[1] = np.array([4,5,6])
In [10]: A
Out[10]: array([array([1, 2, 3]), array([4, 5, 6])], dtype=object)
查看它的另一种方法:reshape
只是更改数组的属性。它对数据没有任何作用。对于3d数组,有一个shape
值和一个数据块。
但是在对象数组中,每个对象都有自己的shape
和data
。
答案 1 :(得分:0)
要重塑包含this contribution的numpy数组的numpy数组,您可以先使用b=np.hstack(array_of_arrays)
创建一个扁平的一维numpy数组,然后重塑b
。