如何用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
相关产品推荐
相关产品推荐

