讲师中心 微信公众号
AI工具推荐 视频效率加速

标题:如何在数组列表中找到与目标数组最接近的数组(基于数值比例相似性)

冬枫大大_4152

冬枫大大_4152

发布时间:2026-01-12 18:42:01

|

817人浏览过

|

来源于php中文网

原创

标题:如何在数组列表中找到与目标数组最接近的数组(基于数值比例相似性)

本文介绍一种基于元素间比值总和的数组相似性度量方法,通过计算目标数组与候选数组各对应位置元素的比值之和,选取总和最接近理论最大值(即数组长度)的数组索引作为“最接近”结果。

在实际开发中,常需从一组候选数组中找出与给定“主数组”最相似的一个——例如在信号匹配、特征向量检索或模板比对等场景中。但“最接近”需明确定义:本文采用归一化比例相似性(ratio-based similarity) 作为核心指标:若两个等长数组完全相同,则其逐元素比值均为 1,比值总和即等于数组长度;差异越大,比值总和越偏离该值。因此,我们以比值总和最接近数组长度为判据,实现高效、可解释的最近邻查找。

以下是完整实现(含健壮性增强):

function findClosestArray(target, candidates) {
  if (!Array.isArray(target) || candidates.length === 0) {
    throw new Error('Invalid input: target must be an array, candidates must be a non-empty array of arrays');
  }

  // 辅助函数:计算两等长数组的比值总和(target[i] / candidate[i])
  const sumRatios = (a, b) => {
    if (a.length !== b.length || a.length === 0) return -Infinity; // 长度不匹配视为无效
    return a.reduce((sum, val, i) => sum + val / b[i], 0);
  };

  // 计算每个候选数组的相似度得分(越接近 target.length 越相似)
  const scores = candidates.map(candidate => ({
    index: candidates.indexOf(candidate),
    score: sumRatios(target, candidate)
  })).filter(item => item.score > 0); // 过滤掉因除零或长度不等导致的无效分

  if (scores.length === 0) {
    throw new Error('No valid candidate array found: all have mismatched length or contain zero/division-by-zero');
  }

  // 找到 score 最接近 target.length 的索引(最小绝对差)
  const idealScore = target.length;
  const bestMatch = scores.reduce((best, curr) => {
    const diff = Math.abs(curr.score - idealScore);
    return diff < Math.abs(best.score - idealScore) ? curr : best;
  });

  return bestMatch.index;
}

// 示例使用
const mainArr = [2237, 2192, 2234, 2223, 2196, 2279, 2160, 2123]; // 注意:原问题中 mainArr 长度为 9,但示例 candidates 均为 8 元素 → 此处统一为 8 以保证可比性
const otherArrays = [
  [1757, 1650, 1757, 1774, 1755, 1615, 1591, 1550],
  [1678, 1545, 1742, 1605, 1662, 1629, 1678, 1601]
];

console.log(findClosestArray(mainArr, otherArrays)); // 输出:0 或 1,取决于哪组比值总和更接近 8

✅ 关键设计说明:

Idea Spark
Idea Spark

根据用户提供的领域或兴趣生成项目创意。当用户询问项目想法、寻求灵感、说“应该做什么项目”或“给我点想法”等时使用。

下载
  • 长度敏感性:函数默认要求 target 与每个 candidate 长度严格一致;若需支持变长数组,可扩展为插值对齐、滑动窗口匹配或余弦相似度等更高级策略。
  • 数值鲁棒性:自动过滤含 0 元素的候选数组(避免除零),并跳过长度不匹配项。
  • 语义清晰:score ≈ target.length 直观反映“整体比例一致性”,比单纯欧氏距离更适应尺度变化场景(如不同传感器量纲)。

⚠️ 注意事项:

  • 若所有候选数组均含零值或长度不匹配,函数将抛出明确错误,便于调试;
  • 该方法假设数组元素均为正数(比值有意义);若含负数或零,建议改用曼哈顿距离或余弦相似度:
    // 替代方案:余弦相似度(适用于含负数/零的向量)
    const cosineSimilarity = (a, b) => {
      const dot = a.reduce((s, v, i) => s + v * b[i], 0);
      const normA = Math.sqrt(a.reduce((s, v) => s + v * v, 0));
      const normB = Math.sqrt(b.reduce((s, v) => s + v * v, 0));
      return normA && normB ? dot / (normA * normB) : 0;
    };

综上,findClosestArray 提供了一种轻量、透明且易于调优的数组相似性判定方案,可根据实际数据特性灵活选用距离度量模型。

热门AI工具

更多
咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

更多
length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

1947

2023.09.19

传感器故障解决方法
传感器故障解决方法

传感器故障排除指南:识别故障症状(如误读或错误代码)。检查电源和连接(确保连接牢固,无损坏)。校准传感器(遵循制造商说明)。诊断内部故障(目视检查、信号测试、环境影响评估)。更换传感器(选择相同规格,遵循安装说明)。验证修复(检查信号准确性,监测异常行为)。

4684

2024.06.04

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

20

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

20

2026.11.05

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

20

2026.11.04

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

20

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

20

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn