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

如何用Numpy优雅实现基于两个列表的二维数组透视表?

利用Numpy向量化操作替代循环实现布尔匹配矩阵

你可以通过Numpy的广播机制实现完全向量化的操作,彻底去掉循环,代码更简洁高效:

实现代码

import numpy as np

list_1 = ["A", "B", "C"]
list_2 = ["D", "A", "B"]

# 将列表转为numpy数组
arr_1 = np.array(list_1)
arr_2 = np.array(list_2)

# 利用广播生成匹配矩阵,再转为float类型
result = (arr_2[:, np.newaxis] == arr_1).astype(float)

print(result)

输出结果

array([[0., 0., 0.],
       [1., 0., 0.],
       [0., 1., 0.]])

原理说明

  • arr_2[:, np.newaxis] 将形状为 (3,) 的 arr_2 转换为 (3,1) 的列向量
  • Numpy的广播机制会自动将这个列向量与形状为 (3,) 的 arr_1 扩展为相同的 (3,3) 维度,逐元素进行相等性比较
  • 最后用 astype(float) 将布尔值(True/False)转换为对应的浮点数值(1./0.),与你期望的输出格式一致

简化写法

你也可以用 [:, None] 替代 [:, np.newaxis],效果完全相同:

result = np.equal(arr_2[:, None], arr_1).astype(float)

这种向量化操作比循环更高效,尤其是当列表规模较大时,能充分发挥Numpy的底层优化优势。

内容的提问来源于stack exchange,提问作者Jaroslav Bezděk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:07:03