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

如何高效将Numpy一维数组转换为目标格式的布尔二维数组

高效生成置换矩阵的Numpy方法

嘿,这个需求其实就是生成置换矩阵,我平时处理这类问题常用下面两种高效的Numpy实现方式,都是矢量化操作,比手写循环快得多:

方法1:利用单位矩阵的行索引置换

这是最直观的方式,置换矩阵本质就是单位矩阵按照给定的顺序重新排列行。因为你的输入是1-based的索引,我们先转成0-based,再直接索引单位矩阵的行即可:

import numpy as np

# 你的输入数组
input_arr = np.array([1, 3, 2])
# 转换为0-based索引
zero_based_idx = input_arr - 1
# 生成对应置换矩阵
perm_matrix = np.eye(len(input_arr), dtype=int)[zero_based_idx]

print(perm_matrix)
# 输出:
# [[1 0 0]
#  [0 0 1]
#  [0 1 0]]

这种方法的优势是代码简洁,Numpy的索引操作是高度优化的,处理大数组也毫无压力。

方法2:直接创建全零矩阵并赋值

如果担心单位矩阵的内存开销(比如数组特别大的时候),可以直接初始化全零矩阵,然后通过高级索引给对应位置赋值1:

import numpy as np

input_arr = np.array([1, 3, 2])
n = len(input_arr)
perm_matrix = np.zeros((n, n), dtype=int)
# 行索引是0到n-1,列索引是输入数组转0-based后的结果
perm_matrix[np.arange(n), input_arr - 1] = 1

print(perm_matrix)
# 输出和上面一致

这个方法更灵活,比如如果你的输入是其他形式的映射关系,也能轻松调整索引逻辑。

两种方法都是Numpy原生的矢量化操作,效率拉满,完全不需要用Python循环去逐个赋值,推荐根据你的实际场景选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:38:00