我的起点是一个 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]] ]])
我该如何优雅快速地做到这一点?
最佳答案
执行 arr[:, :, None, None]
添加两个额外的轴。这是一个例子:
In [5]: arr[:, :, None, None].shape
Out[5]: (4, 3, 1, 1)
indexing中的None
是np.newaxis
的同义词,它选择数据并添加一个新的轴。很多人更愿意把上面的写成
arr[:, :, np.newaxis, np.newaxis]
出于易读性原因
关于python - 将 (n,m) 形 numpy 数组转换为 (n,m,1,1) 形数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30051959/