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

在Matlab中构造特殊结构的w×(m*w)矩阵技术求助

构造特定偏移连续1块矩阵的Matlab实现方案

我来帮你理清思路,其实这个矩阵的构造可以从直观循环和高效向量化两种方式实现,下面分别说明:

一、直观的循环实现(适合新手理解)

这种方法逻辑直白,逐行设置连续的1块:

w = 3; % 行数
m = 2; % 每行连续1的个数
A = zeros(w, m*w); % 初始化全零矩阵

for i = 1:w
    start_col = i; % 第i行的1块起始列
    end_col = i + m - 1; % 第i行的1块结束列
    A(i, start_col:end_col) = 1; % 设置连续的1
end

运行这段代码(w=3,m=2),得到的矩阵A是:

1     1     0     0     0     0
     0     1     1     0     0     0
     0     0     1     1     0     0

二、高效的向量化实现(适合大矩阵场景)

Matlab里向量化操作比循环更高效,尤其当w和m很大时,推荐用这种方法:

w = 3;
m = 2;
[row_idx, col_idx] = meshgrid(1:w, 1:m*w); % 生成行、列索引网格
A = (col_idx >= row_idx & col_idx <= row_idx + m - 1)'; % 逻辑判断后转置得到目标矩阵

原理解释:

  • meshgrid(1:w, 1:m*w)生成两个矩阵:row_idx的每一行都是[1,2,...,w],col_idx的每一列都是[1,2,...,m*w];
  • 逻辑条件col_idx >= row_idx & col_idx <= row_idx + m -1会标记出每个位置是否属于对应行的连续1块范围;
  • 最后转置'是因为meshgrid生成的索引矩阵是列数×行数,转置后得到我们需要的w×(m*w)矩阵。

额外说明

如果你的需求是每行的1块整体向右偏移m个位置(比如第一行1-2,第二行3-4,第三行5-6),只需要把起始列改成(i-1)*m +1即可,循环代码调整为:

for i = 1:w
    start_col = (i-1)*m + 1;
    end_col = i*m;
    A(i, start_col:end_col) = 1;
end

这种情况下得到的矩阵是分块的全1块,你可以根据实际需求选择偏移步长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:17:41