我的出发点是一个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]] ]])
我如何优雅而快速地做到这一点?
答案 0 :(得分:4)
执行arr[:, :, None, None]
添加两个额外的轴。这是一个例子:
In [5]: arr[:, :, None, None].shape
Out[5]: (4, 3, 1, 1)
索引中的 None
是np.newaxis
的同义词,它选择数据并添加新轴。许多人更愿意将上述内容写成
arr[:, :, np.newaxis, np.newaxis]
出于易读原因