numpy 计算两个数组重复程度

本文介绍了一种计算两个数组重复程度的方法,包括找到重复元素、统计元素个数,并通过具体代码展示了如何统计相同元素的匹配个数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有个需求,是做两个数组重复程度计算,麻烦就麻烦在单个数组的元素有可能重复,处理思路如下:
1. 找到重复元素
2. 元素个数统计,利用np.bincount转换,即元素个数统计到元素转化的索引
3. 统计相同元素匹配个数

具体代码如下:

# arr1, arr2都是np.array类型
# 找到重复元素(交集)
inters = np.intersect1d(arr1, arr2)
# 元素个数索引转换
bc1 = np.bincount(arr1)
bc2 = np.bincount(arr2)
# 统计相同元素匹配个数
same_count_list = [min(bc1[x], bc2[x]) for x in inters]
same_count = sum(same_count_list)
### 计算两个矩阵相似度的方法及实现 #### 使用余弦相似性计算矩阵相似度 一种常见的衡量两个矩阵之间相似性的方法是通过计算它们的余弦相似性。对于给定的两个矩阵 \(A\) 和 \(B\) ,可以通过定义函数 `cos_cdist_1` 来计算两个矩阵每一行向量之间的余弦距离[^1]。 ```python import numpy as np from scipy.spatial.distance import cosine def cos_cdist_1(matrix, vector): v = vector.reshape(1, -1) return np.array([1 - cosine(m, v) for m in matrix]) ``` 此代码片段展示了如何利用 SciPy 库中的 `cosine` 函数来逐个比较矩阵内的每一个向量与指定向量间的夹角余弦值,从而得出相似程度得分。 #### 利用 PyTorch 高效计算大规模矩阵间欧氏距离 当面对非常大的数据集时,可以采用更高效的解决方案——借助于 PyTorch 的 `torch.cdist` 方法来进行快速的大规模矩阵相似度评估。该方法能够有效处理高维度空间下的大量样本点,并支持 GPU 加速以提升性能表现[^2]。 ```python import torch N, M, C = 20000, 50000, 128 A = torch.rand((N, C)).cuda() B = torch.rand((M, C)).cuda() S = torch.cdist(A, B, p=2) print(S.shape) ``` 上述代码创建了形状分别为 \((N,C)\) 和 \((M,C)\) 的随机张量作为输入矩阵 A 和 B 。接着调用了 `torch.cdist()` 函数用于解两组特征向量集合间的成对欧式距离,最终返回的结果是一个大小为 \((N,M)\) 的浮点数型二维数组 S 表示所有可能组合下对应的直线距离。 #### 基于 PyTorch 实现自定义相似度测量逻辑 除了直接应用内置工具外,还可以基于具体应用场景需编写个性化的算法流程。例如,在某些情况下希望调整默认行为使得相同位置上的重复元素获得平均秩次而非单独计分,则可以在构建模型过程中加入相应控制语句完成定制化操作[^3]。 ```python import torch A = torch.randint(5, 100, (1, 4)) B = torch.randint(5, 100, (1, 4)) A, B = A.float(), B.float() similarity_matrix = 1 / (1 + torch.norm(A.unsqueeze(1) - B.unsqueeze(0), dim=-1)) print(similarity_matrix) ``` 这段脚本先初始化了一对低维整数值域范围内的测试用例;之后转换其数据类型至单精度浮点数以便后续运算顺利开展;最后运用广播机制配合范数公式实现了简易版的相似度量化方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值