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

如何使用numpy修改NxN矩阵的m×m子矩阵实现数值交替排布

N×N交替m×m子块矩阵的高效实现

你可以用numpy的向量化操作完全避免循环,运行效率远高于手写多层循环,以下是两种通用实现方案:

方案1:repeat扩展法

import numpy as np

# 可按需修改以下参数
N = 6           # 最终矩阵大小
m = 2           # 子块大小
val1 = 0        # 第一种子块的取值
val2 = 1        # 第二种子块的取值

block_num = N // m
# 生成块级交替的棋盘矩阵
block_grid = (np.arange(block_num)[:, np.newaxis] + np.arange(block_num)) % 2
# 把每个块扩展为m×m大小,替换为对应取值
res = np.where(block_grid.repeat(m, axis=0).repeat(m, axis=1) == 0, val1, val2)
print(res)

逻辑说明

  • 先计算一共需要多少个子块:block_num = N // m(要求N必须是m的整数倍,否则不满足均匀排布子块的需求)
  • 生成block_num × block_num的棋盘矩阵,每个位置的值根据坐标和模2交替为0、1,对应两种子块的类型
  • 用repeat方法在行、列维度各重复m次,将每个块的位置放大为m×m的实际大小
  • 最后用np.where把0、1替换为你需要的任意取值,不需要局限于0和1

方案2:克罗内克乘积法

如果你熟悉克罗内克乘积,可以用更简洁的写法实现相同效果:

import numpy as np

N = 6
m = 2
val1 = 0
val2 = 1

block_num = N // m
block_grid = (np.arange(block_num)[:, np.newaxis] + np.arange(block_num)) % 2
res = np.kron(block_grid, np.full((m, m), val2)) + np.kron(1 - block_grid, np.full((m, m), val1))
print(res)

两种方案都是完全基于numpy底层C实现的运算,没有Python层面的循环,当矩阵规模较大时性能比四层循环高出几个数量级,同时可读性也更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:36:04