我在阵列中有891个大小为7X32的矩阵。我想得到891三倍大小为7X32的矩阵。
两个矩阵的示例(显然不是那个大小):
[[1,1,1,1,1],
[2,2,2,2,2],
[3,3,3,3,3]],
[[2,2,2,2,2],
[2,2,2,2,2],
[3,3,3,3,3]]
我需要它成为:
[[1,1,1,1,1],
[2,2,2,2,2],
[3,3,3,3,3]],
[[1,1,1,1,1],
[2,2,2,2,2],
[3,3,3,3,3]],
[[1,1,1,1,1],
[2,2,2,2,2],
[3,3,3,3,3]],
[[2,2,2,2,2],
[2,2,2,2,2],
[3,3,3,3,3]],
[[2,2,2,2,2],
[2,2,2,2,2],
[3,3,3,3,3]],
[[2,2,2,2,2],
[2,2,2,2,2],
[3,3,3,3,3]],
其中[]表示它是一个不同的矩阵。
我用来获取矩阵的代码:
matrices = np.dstack([df.values.astype(int)] * 32)
来自常规数据框。
我想也许
matrices = np.dstack([[df.values.astype(int)] * 32]*3)
会起作用,但事实并非如此。
我这样做是为了尝试将常规问题变成像cifar 10数据一样的“图像”。
答案 0 :(得分:3)
再延长一个暗淡/轴后使用np.repeat
-
np.repeat(a[None],3,axis=0)
示例运行 -
In [140]: a
Out[140]:
array([[7, 1, 8, 6],
[5, 8, 1, 1],
[2, 7, 3, 7]])
In [141]: np.repeat(a[None],3,axis=0)
Out[141]:
array([[[7, 1, 8, 6],
[5, 8, 1, 1],
[2, 7, 3, 7]],
[[7, 1, 8, 6],
[5, 8, 1, 1],
[2, 7, 3, 7]],
[[7, 1, 8, 6],
[5, 8, 1, 1],
[2, 7, 3, 7]]])
我们也可以使用np.broadcast_to
-
np.broadcast_to(a[None],(3,) + a.shape) # creates a read-only version
要制作可写版本,请附加.copy()
。
使用OP和@piRSquared之间的历史以及答案帖子,这是我的飞镖 -
a = df.values.astype(int)
shp = a.shape
out = np.broadcast_to(a[:,None,:,None], (shp[0], 3, shp[1], 32))
答案 1 :(得分:2)
从原始数据框架看,这似乎有效。但是,如果他能够提供你需要的东西,我会推迟@Divakar的建议。
至于我的解决方案,我确信有更好的方法,但这很有效。这甚至可以给@Divakar他需要看的东西,以便向我们展示更好的方式。
np.stack([np.dstack([df.values.astype(int)] * 32)] * 3).transpose(1, 0, 2, 3)
设置
df = pd.DataFrame({
'Embarked': [0, 1, 1, 3, 1],
'Family': [1, 1, 0, 1, 0],
'Fare': [1.0, 2.0, 1.0, 2.0, 2.0],
'Pclass': [3, 1, 3, 1, 3],
'Sex': [0, 1, 1, 1, 0],
'Title': [0, 3, 2, 3, 1]}
)['Pclass Sex Fare Embarked Title Family'.split()]