You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Numpy数组进行元素重复式缩放以实现维度翻倍?

在NumPy中实现数组的块式元素重复缩放

你遇到的问题很典型——numpy.resize是按一维展平后循环填充的,所以没法实现你要的块式重复缩放(每个元素在行列方向都复制一次,形成2x2的块)。不过NumPy有好几种直接实现这个需求的方法,我给你列两个最常用的:

方法一:用numpy.repeat分步重复

这是最直观的方式,先在列方向把每个元素重复2次,再在行方向做同样的操作:

import numpy as np

# 定义原数组
arr = np.array([
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
    [13, 14, 15, 16]
])

# 先列方向重复2次,再行方向重复2次
scaled_arr = arr.repeat(2, axis=1).repeat(2, axis=0)

print(scaled_arr)

输出结果完全符合你的预期:

[[ 1  1  2  2  3  3  4  4]
 [ 1  1  2  2  3  3  4  4]
 [ 5  5  6  6  7  7  8  8]
 [ 5  5  6  6  7  7  8  8]
 [ 9  9 10 10 11 11 12 12]
 [ 9  9 10 10 11 11 12 12]
 [13 13 14 14 15 15 16 16]
 [13 13 14 14 15 15 16 16]]

方法二:用numpy.kron(克罗内克积)

如果你熟悉线性代数的话,克罗内克积可以一步到位实现这种块式扩展。我们用一个2x2的全1数组和原数组做积,相当于把原数组的每个元素都扩展成2x2的块:

scaled_arr = np.kron(arr, np.ones((2, 2), dtype=int))

运行这段代码会得到和上面完全一样的结果,代码更简洁,适合对克罗内克积熟悉的场景。

为什么numpy.resize不行?

补充说明一下你遇到的resize问题:numpy.resize会先把原数组展平成一维数组(比如你的原数组展平后是[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]),然后重复这个一维数组直到填满目标形状(8x8),所以才会出现那种按行循环填充的结果,和你要的块式缩放逻辑完全不同。

内容的提问来源于stack exchange,提问作者user16541277

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 21:43:12