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

如何用Numpy实现二维矩阵指定索引范围内的累积计数?

用NumPy高效生成指定左上角区域的累积计数矩阵

嘿,这个需求用NumPy的广播机制就能完美解决,完全不用写繁琐的循环,非常符合Pythonic的风格!

先直接上代码,对应你给出的3x3矩阵、目标位置(1,1)的场景:

import numpy as np

# 定义矩阵的尺寸
rows, cols = 3, 3
# 目标位置(x,y)(这里是0-based索引,对应你例子中的需求)
x_target, y_target = 1, 1

# 生成行索引矩阵(形状为(rows, 1),用于广播)
row_indices = np.arange(rows)[:, np.newaxis]
# 生成列索引矩阵(形状为(1, cols),用于广播)
col_indices = np.arange(cols)

# 生成布尔掩码:筛选出行号≤x_target 且 列号≤y_target的区域
mask = (row_indices <= x_target) & (col_indices <= y_target)
# 将布尔矩阵转为整数矩阵(1表示符合条件,0表示不符合)
result_matrix = mask.astype(int)

print(result_matrix)

运行后输出完全符合你的预期:

[[1 1 0]
 [1 1 0]
 [0 0 0]]

为什么这个方法可行?

核心是利用了NumPy的广播机制:

  • np.arange(rows)[:, np.newaxis]把一维行索引转成列向量(比如3行时是[[0], [1], [2]])
  • np.arange(cols)是一维列索引(比如3列时是[0,1,2])
  • 当对两者做比较时,NumPy会自动将它们广播为相同的(rows, cols)形状,每个位置对应行号和列号,再通过逻辑与&合并条件得到布尔矩阵,最后转成整数就得到了你要的累积计数矩阵。

这个方法不仅简洁,而且效率极高——基于NumPy底层的C实现,比Python循环快得多,哪怕处理超大矩阵也能轻松应对。如果需要调整矩阵尺寸或目标位置,只需要修改对应参数即可,扩展性拉满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:59:23