将numpy数组元素复制到多个方向

2024-04-29 22:06:09 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我的大问题是我有一个很大的形状数组,比如(754580)。首先,我想用随机数(来自截断正态分布)填充这个数组。这是非常简单的,scipy.stats.truncnorm.rvs(..., size= (754, 580))起到了作用

然而,现在我想避免使用完全随机的数字。相反,我希望每个数字在行和列中重复m次(并在边缘处截断)。e、 例如,我想用m=3填充a(5,10),期望的输出可以是

[[0.32  0.32  0.32  0.569 0.569 0.569 0.532 0.532 0.532 0.75 ]
 [0.32  0.32  0.32  0.569 0.569 0.569 0.532 0.532 0.532 0.75 ]
 [0.32  0.32  0.32  0.569 0.569 0.569 0.532 0.532 0.532 0.75 ]
 [0.158 0.158 0.158 0.49  0.49  0.49  0.33  0.33  0.33  0.12 ]
 [0.158 0.158 0.158 0.49  0.49  0.49  0.33  0.33  0.33  0.12 ]]

因为每个元素沿着每行重复三次(除了最后一行,因为总共只有10行而不是12行,所以它被截断),并且沿着每一列重复三次(除了最后一行,因为总共只有5行而不是6行而被截断)

我相信截断非常容易处理,我可以生成一个(6,12)数组,然后只选择第一个(5,10)切片。但我很难让重复发生在x和y方向,就像例子中那样

如何为generalm执行此操作


TLDR:

例如,提供m=3,我如何从

[[0.32  0.569 0.532 0.75 ]
 [0.158 0.49  0.33  0.12 ]]

to(用于设定目标尺寸(5,10))

[[0.32  0.32  0.32  0.569 0.569 0.569 0.532 0.532 0.532 0.75 ]
 [0.32  0.32  0.32  0.569 0.569 0.569 0.532 0.532 0.532 0.75 ]
 [0.32  0.32  0.32  0.569 0.569 0.569 0.532 0.532 0.532 0.75 ]
 [0.158 0.158 0.158 0.49  0.49  0.49  0.33  0.33  0.33  0.12 ]
 [0.158 0.158 0.158 0.49  0.49  0.49  0.33  0.33  0.33  0.12 ]]

甚至只是

[[0.32  0.32  0.32  0.569 0.569 0.569 0.532 0.532 0.532 0.75  0.75  0.75 ]
 [0.32  0.32  0.32  0.569 0.569 0.569 0.532 0.532 0.532 0.75  0.75  0.75 ]
 [0.32  0.32  0.32  0.569 0.569 0.569 0.532 0.532 0.532 0.75  0.75  0.75 ]
 [0.158 0.158 0.158 0.49  0.49  0.49  0.33  0.33  0.33  0.12  0.12  0.12 ]
 [0.158 0.158 0.158 0.49  0.49  0.49  0.33  0.33  0.33  0.12  0.12  0.12 ]
 [0.158 0.158 0.158 0.49  0.49  0.49  0.33  0.33  0.33  0.12  0.12  0.12 ]]

1条回答
网友
1楼 · 发布于 2024-04-29 22:06:09

我将使用np.kron创建瓷砖,然后使用切片将其切割到所需的大小

a = np.array([[0.32  0.569 0.532 0.75 ]
              [0.158 0.49  0.33  0.12 ]])
np.kron(a, np.ones((3, 3), dtype=a.dtype))[:5, :10]
[[0.32  0.32  0.32  0.569 0.569 0.569 0.532 0.532 0.532 0.75 ]
 [0.32  0.32  0.32  0.569 0.569 0.569 0.532 0.532 0.532 0.75 ]
 [0.32  0.32  0.32  0.569 0.569 0.569 0.532 0.532 0.532 0.75 ]
 [0.158 0.158 0.158 0.49  0.49  0.49  0.33  0.33  0.33  0.12 ]
 [0.158 0.158 0.158 0.49  0.49  0.49  0.33  0.33  0.33  0.12 ]]

相关问题 更多 >