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

如何用Numpy等工具高效计算多组二进制数组的成对准确率?

用Numpy高效计算二进制数组成对准确率

给定若干长度相同的二进制数组,我们需要计算每对数组间的成对准确率(即两数组元素相等的比例)。比如输入数组:

A = [[1,1,1], [0,1,0], [1,1,0]]

期望输出一个对称矩阵,其中每个位置(i,j)对应第i个和第j个数组的元素相等比例。

解决方案

利用Numpy的向量化广播机制,无需多层循环即可高效完成计算,步骤如下:

  1. 导入依赖并转换数组为Numpy格式
import numpy as np
from fractions import Fraction  # 用于格式化输出分数

# 转换输入为Numpy数组
A = np.array([[1,1,1], [0,1,0], [1,1,0]])
  1. 向量化计算成对准确率
    通过广播实现两两数组的元素比较,再沿元素维度取平均值:
# 广播实现两两元素比较,计算相等比例
pair_accuracy = (A[:, None, :] == A[None, :, :]).mean(axis=-1)
  1. 格式化输出(匹配示例样式)
    如果需要输出类似示例的分数/小数混合格式,可以遍历矩阵元素进行转换:
# 遍历每行,格式化输出
for row in pair_accuracy:
    formatted_items = []
    for val in row:
        if val == 1.0:
            formatted_items.append("1. ")
        else:
            frac = Fraction(val).limit_denominator()
            formatted_items.append(f"{frac.numerator}/{frac.denominator}")
    # 对齐格式输出
    print("{:>4}, {:>4}, {:>4}".format(*formatted_items))

运行结果

执行上述代码后,输出与示例完全一致:

1. ,  1/3,  2/3
 1/3,   1. ,  2/3
 2/3,  2/3,   1. 

原理说明

  • 广播机制:A[:, None, :]将原数组形状从(n, m)转为(n, 1, m),A[None, :, :]转为(1, n, m),两者广播后形成(n, n, m)的三维数组,每个位置存储对应两个数组元素的相等判断结果(True=1,False=0)。
  • 均值计算:mean(axis=-1)沿最后一维(元素维度)取平均,直接得到每对数组的元素相等比例,避免了Python循环的性能开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:45:31