将(n,m)形numpy数组转换为(n,m,1,1)形数组

时间:2015-05-05 11:39:04

标签: python numpy

我的出发点是一个pandas数据框,我将其转换为numpy数组:

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

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

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

我想做的是通过有效地映射每个奇异元素(如f.x),将arr转换为其4维和(4,3,1,1)形状的等价物。 5 [[5]]

新的arr将是:

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

我如何优雅而快速地做到这一点?

1 个答案:

答案 0 :(得分:4)

执行arr[:, :, None, None]添加两个额外的轴。这是一个例子:

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

Nonenp.newaxis的同义词,它选择数据并添加新轴。许多人更愿意将上述内容写成

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

出于易读原因