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

Numpy concatenate用法:如何正确拼接滑动窗口数组还原目标形状

解决方案

核心思路

你当前的windows数组形状为(n, d, a, b, c, c),其中a是垂直方向的窗口数量,b是水平方向的窗口数量,每个窗口尺寸为c×c。要还原为原始形状,只需要调整维度顺序后合并对应维度即可,不需要复杂操作。

实现代码

方法1:维度重排+reshape(性能最优)

import numpy as np

# 本示例中windows.shape = (1, 1, 3, 3, 2, 2)
# 调整维度顺序:将窗口行维度(a)和单窗口行维度(c)相邻,窗口列维度(b)和单窗口列维度(c)相邻
windows_reordered = windows.swapaxes(3, 4)
# 合并维度得到目标形状
mask = windows_reordered.reshape(windows.shape[0], windows.shape[1], -1, windows.shape[3] * windows.shape[-1])

# 验证形状,输出为 (1, 1, 6, 6)
print(mask.shape)

方法2:两次concatenate(更易理解)

如果你习惯用拼接逻辑实现,需要分别沿水平、垂直方向两次拼接窗口,注意不要直接传整个数组给np.concatenate:

# 第一步:沿水平方向(列维度)拼接同一行内的所有c×c窗口
step1 = np.concatenate(windows, axis=-1)
# 第二步:沿垂直方向(行维度)拼接所有行的窗口
mask = np.concatenate(step1, axis=-2)

常见问题说明

  1. 为什么直接用np.concatenate(windows, axis=2)会压缩n维度?
    np.concatenate的第一个参数需要是数组序列,如果直接传入高维数组,numpy会默认将第一个维度的每个元素作为待拼接的数组,所以会拆分n维度进行拼接,导致结果不符合预期。
  2. 为什么直接reshape顺序错误?
    直接reshape是按照数组的内存存储顺序重组元素,原维度顺序(a, b, c, c)下,同一行窗口的元素不是连续存储的,必须先交换b和第一个c的位置,让同一块的行元素连续,才能reshape出正确顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:27:00