首页 > 解决方案 > 替换和扁平化 Numpy 数组

问题描述

我有形状的 ndarray (2,1)。每个元素都是一个形状的 ndarray(4) 我想制作一个形状的数据框(2,4)

当前形状:

df.shape = (2,1)
df[0].shape = (1,)
df[0][0].shape = (4,)

例如:

df[0][0] = [1 2 2 4]
df[1][0] = [1 1 1 1]

我希望它看起来像这样:

df[0] = [1 2 2 4]
df[1] = [1 1 1 1]

标签: pythonpython-3.xpandasnumpynumpy-ndarray

解决方案


看起来你有一个对象 dtype 数组(但为什么叫它df?):

In [150]: df = np.empty((2,1),object)                                                                           
In [151]: df[0,0] = np.array([1,2,2,4])                                                                         
In [152]: df[1,0] = np.array([1,1,1,1])                                                                         
In [153]: df                                                                                                    
Out[153]: 
array([[array([1, 2, 2, 4])],
       [array([1, 1, 1, 1])]], dtype=object)
In [154]: df.shape                                                                                              
Out[154]: (2, 1)
In [155]: df[0].shape                                                                                           
Out[155]: (1,)
In [156]: df[0,0].shape                                                                                         
Out[156]: (4,)

np.concatenate(或其中一个stack派生词)可以加入数组的列表/可迭代数组,前提是它们的大小匹配。

stack直接应用于df不起作用,因为它是 (2,1) 形的:

In [157]: np.stack(df)                                                                                          
Out[157]: 
array([[array([1, 2, 2, 4])],
       [array([1, 1, 1, 1])]], dtype=object)

但是,如果我们首先解开(或挤压)数组,使其成为 (2,) 形状:

In [158]: np.stack(df.ravel())                                                                                  
Out[158]: 
array([[1, 2, 2, 4],
       [1, 1, 1, 1]])

推荐阅读