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

如何用Python/Numpy内置函数将一维数组转换为逻辑矩阵?

在Python/NumPy中生成指定逻辑矩阵的方法

当然有办法实现!虽然NumPy里没有专门直接生成这种1-based索引的one-hot矩阵的单一内置函数,但用几个原生函数组合起来就能轻松搞定,而且效率很高,完全满足你的需求。

方法一:用np.eye()快速实现(最简洁)

这个方法利用单位矩阵的特性,通过索引直接提取对应的行,一步到位:

import numpy as np

# 你的原始数组
array = np.array([1, 3, 1, 2])
# 确定目标矩阵的列数:原数组最大值+1(因为元素是1-based)
num_classes = array.max() + 1
# 生成one-hot矩阵:先创建单位矩阵,再用数组元素-1(转成0-based索引)提取对应行
one_hot_matrix = np.eye(num_classes, dtype=int)[array - 1]

print(one_hot_matrix)

运行后输出正好是你要的结果:

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

方法二:手动构建(更直观,适合理解逻辑)

如果想更清楚底层实现,可以用np.zeros()初始化矩阵,再给对应位置赋值:

import numpy as np

array = np.array([1, 3, 1, 2])
num_classes = array.max() + 1
# 初始化全0矩阵,行数等于原数组长度,列数为num_classes
one_hot_matrix = np.zeros((len(array), num_classes), dtype=int)
# 给每个元素对应的位置赋值1:行索引是原数组的位置,列索引是元素值-1
one_hot_matrix[np.arange(len(array)), array - 1] = 1

print(one_hot_matrix)

这个方法和上面的结果完全一致,适合新手理解one-hot矩阵的生成逻辑。

两种方法都是基于NumPy原生函数,处理大规模数组时性能也很出色,完全不需要自己写循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:11:01