我在一个数组中有 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 数据这样的“图像”。
请您参考如下方法:
使用np.repeat在再扩展一个暗淡/轴之后-
np.repeat(a[None],3,axis=0)
sample 运行-
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))
