2015-05-05 60 views
3

我的出发点是,我转换成numpy的阵列的熊猫数据帧:转换的(N,M)形numpy的阵列成(N,M,1,1)形阵列

> df = pd.DataFrame({"a":[1,2,3,4],"b":[4,5,6,7],"c":[7,8,9,10]}) 
> arr = df.as_matrix() 

的阵列是现在的2维形状(4,3)的:

> arr 
array([[ 1, 4, 7], 
     [ 2, 5, 8], 
     [ 3, 6, 9], 
     [ 4, 7, 10]]) 

我想要做的是通过有效地arr转换成它的4维和(4,3,1,1)成形等效映射每个单数元素如fx 5[[5]]

arr是:

array([[ [[1]], [[4]], [[7]] ], 
     [ [[2]], [[5]], [[8]] ], 
     [ [[3]], [[6]], [[9]] ], 
     [ [[4]], [[7]], [[10]] ]]) 

我将如何做到这一点优雅和快?

回答

4

arr[:, :, None, None]添加两个额外的轴。下面是一个例子:

In [5]: arr[:, :, None, None].shape 
Out[5]: (4, 3, 1, 1) 

None在索引为np.newaxis的同义词,其选择数据,并增加了一个新的轴线。许多人宁愿写上面

arr[:, :, np.newaxis, np.newaxis]

的可读性方面的原因