Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重塑嵌套数组_Python_Arrays_Numpy - Fatal编程技术网

Python 重塑嵌套数组

Python 重塑嵌套数组,python,arrays,numpy,Python,Arrays,Numpy,我目前有一个形状数组(27),其中每个数组条目都是一个形状数组(121,61)。我想将ndarray重新调整为(3267,61)的新大小,这只是将嵌套数组扩展/展平为一个数组 我尝试过使用.resize(3267,61)和.reformate(3267,61),但当我这样做时,会出现以下错误: ValueError:无法将大小为27的数组重塑为形状(3267、61) ValueError:无法调整此数组的大小:它不拥有自己的数据您可以使用np.stack()将数组序列转换为单个ndarray,然

我目前有一个形状数组(27),其中每个数组条目都是一个形状数组(121,61)。我想将ndarray重新调整为(3267,61)的新大小,这只是将嵌套数组扩展/展平为一个数组

我尝试过使用.resize(3267,61)和.reformate(3267,61),但当我这样做时,会出现以下错误:

ValueError:无法将大小为27的数组重塑为形状(3267、61)

ValueError:无法调整此数组的大小:它不拥有自己的数据

您可以使用
np.stack()
将数组序列转换为单个
ndarray
,然后可以根据需要对其进行调整:

>>> a = np.zeros((27,), dtype=object)
>>> for i in range(a.shape[0]):
    ... a[i] = np.zeros((121, 61))
>>> b = np.stack(a).reshape((27*121, 61))
>>> b.shape
    (3267, 61)

如果数组元素确实是其他1D
nDarray
(如@CamiloMartínez所示),则使用:

b=np.连接(a)
如果阵列只是一个3D阵列(例如,通过组合阵列列表并让
numpy
对其进行优化获得),则使用:

b=a.重塑(-1,a.形状[-1])
一般情况:如果您不确定,则以下两种情况都适用。它也适用于
a
是包含数组的2D(或更高维度)数组的情况(正如@drod31在注释中所要求的):

b=np.stack(a.ravel())
b=b.重塑(-1,b.形状[-1])
下面是一个简单的例子:

案例1:(thx@CamiloMartínez用于设置)

a=np.empty((27,),dtype=object)
对于范围内的i(a.shape[0]):
a[i]=np.zero((121,61))
b=np.连接(a)
>>>b.形状
(3267, 61)
案例2(我的初始设置,未达到实际阵列条件):

a=np.数组([np.零((121,61))表示范围(27)])
b=a.重塑(-1,a.形状[-1])
>>>b.形状
(3267, 61)
在任何情况下,您通常希望表示转换,而不使用明确的硬编码维度,以便更通用

角落案例示例(根据@drod31问题):

a=np.empty((15,27),dtype=object)
对于范围内的i(a.shape[0]):
对于范围内的j(a.形状[1]):
a[i,j]=np.零((121,61))
>>>a.形状
(15, 27)
>>>[0,0]形状
(121, 61)
b=np.stack(a.ravel())
b=b.重塑(-1,b.形状[-1])
>>>b.形状
(49005, 61)

您需要的是
重塑
功能,而不是
调整大小
。如果您提供一个重现您看到的错误的示例,其他人将更容易帮助您。您可以使用,例如,
np.random.rand(shape)
(或任何适合您的上下文的工具)生成一个示例数组。@joanis我尝试了您提到的重塑函数,但它不起作用-请参见上文关于
np.restrape(array,(3267,61))
?numpy文档介绍了一些可以就地重塑的阵列和其他无法重塑的阵列:@joanis也不起作用。谢谢!这解决了我的问题!您可以使用
np.concatenate(a)
。实际上,
np.stack(a)
起到了主要作用!“皮埃尔D”是对的
np.concatenate(a)
立即重塑
形状。
np.concatenate
沿现有的第一个轴连接组件数组
np.stack
添加一个新的前导维度,然后进行连接。这是否也适用于形状大小为(15,27)的2d数组?当每个数组条目都是(121,61)时@Pierre D至少要在应该得到赞扬的地方给予赞扬。@CamiloMartínez:你完全正确:你的示例设置对于理解这个问题很重要。很抱歉忽略了这一点。@drod31:这一点很好——请参阅修改后的答案以解决这个问题。它也适用于nd阵列(3d,4d,…)@PierreD Perfect,谢谢!!