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

如何高效将1元素位置向量集合转为N=5目标矩阵?求numpy方案

问题描述

现有矩阵中1元素的位置集合:

{(0, 1), (2, 1), (0, 0), (1, 1), (1, 0)}

需要将其转换为大小N=5的目标矩阵:

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

请问是否存在高效实现方式?例如numpy内置函数?逐个遍历位置赋值1的方法效率较低,最终生成的矩阵将用于matplotlib的matshow()函数。

高效实现方案

当然有更高效的numpy实现方式,无需逐个遍历赋值:

  • 拆分坐标批量赋值(推荐)
    先把位置集合转换为数组,拆分出行、列两组坐标,再直接对numpy矩阵的对应位置批量赋值:

    import numpy as np
    
    positions = {(0, 1), (2, 1), (0, 0), (1, 1), (1, 0)}
    N = 5
    # 将位置集合转为数组并拆分行、列坐标
    rows, cols = np.array(list(positions)).T
    # 初始化N×N的全0矩阵
    mat = np.zeros((N, N), dtype=int)
    # 批量给指定位置赋值1
    mat[rows, cols] = 1
    

    这种方式利用numpy的向量化操作,比循环遍历效率高很多,位置数量越大,优势越明显。

  • 处理重复坐标的备选方案
    如果你的位置集合中可能存在重复坐标(需要对重复位置累加计数),可以使用np.add.at方法;若只是单纯赋值1,上面的方法更简洁:

    mat = np.zeros((N, N), dtype=int)
    np.add.at(mat, (rows, cols), 1)
    

生成的矩阵可以直接传入matplotlib.pyplot.matshow(mat)使用,完全兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:05:10