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

如何用Numpy以最简方式从位置-值矩阵构造目标矩阵?

在Numpy中实现从(i,j,val)矩阵构造目标矩阵的简洁方法

嘿,这个需求用Numpy其实有个超高效且简洁的实现方式,核心就是利用Numpy的矢量化索引赋值特性,完全不用写循环!下面直接结合你的例子来演示:

实现步骤与代码

首先,我们可以先确定目标矩阵的形状,然后直接通过输入矩阵的i、j列作为索引,把val列的值批量赋值过去:

import numpy as np

# 你的输入N×3矩阵
input_data = np.array([
    [0, 0, 3],
    [1, 1, 2],
    [0, 1, 4],
    [1, 0, 1],
    [2, 0, 5],
    [2, 1, 2]
])

# 计算目标矩阵的行数(最大行索引+1)和列数(最大列索引+1)
num_rows = input_data[:, 0].max() + 1
num_cols = input_data[:, 1].max() + 1

# 初始化目标矩阵, dtype和输入的val保持一致
result_matrix = np.zeros((num_rows, num_cols), dtype=input_data[:, 2].dtype)

# 核心操作:用i和j作为索引,批量赋值val
result_matrix[input_data[:, 0], input_data[:, 1]] = input_data[:, 2]

print(result_matrix)

运行这段代码后,输出就是你想要的目标矩阵:

[[3 4]
 [1 2]
 [5 2]]

为什么这是最优解?

  • 简洁性:核心逻辑只需要一行赋值代码,完全避免了繁琐的循环遍历
  • 高效性:Numpy的矢量化操作是底层优化过的,比Python循环快几个数量级,尤其当你的输入矩阵N很大时优势明显
  • 灵活性:如果有缺失的(i,j)位置,矩阵会保持初始化的默认值(这里是0),你也可以用np.full()初始化其他默认值,比如np.full((num_rows, num_cols), -1)来标记缺失位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:31:11