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

NumPy数组计算后如何获取另一关联数组的对应值

解决方案

你原有代码的核心问题是单独对width数组做排序,没有同步重排和它一一对应的height数组,丢失了两个数组元素的映射关系,因此无法拿到匹配的height值。以下是纯NumPy向量化的实现,不需要手写Python循环,运行效率更高:

import numpy as np

# 获取width升序排序的索引,同步重排height保证对应关系
sort_idx = np.argsort(width)
sorted_width = width[sort_idx]
sorted_height = height[sort_idx]

# 计算相邻width的后项减前项差值
diff = np.diff(sorted_width)
# 找到差值满足600<差值<800的相邻对起始位置
match_start = np.where((diff > 600) & (diff < 800))[0]
# 拼接得到匹配对的两个位置索引(起始位+后一位)
match_idx = np.concatenate([match_start, match_start + 1])

# 提取结果,需要普通Python列表可调用tolist()
width_calc_list = sorted_width[match_idx].tolist()
height_calc_list = sorted_height[match_idx].tolist()

运行结果验证

用你给出的示例数据:

  • width = np.array([390, 20, 65, 1000])
  • height = np.array([2, 7, 3, 1])
    运行后输出完全符合预期:
width_calc_list: [390, 1000]
height_calc_list: [2, 1]

关键逻辑说明

  • 不要直接用np.sort(width)拿排序后的值,改用np.argsort(width)拿排序索引,这样可以对所有和width关联的数组做完全一致的重排,不会打乱width和height的一一对应关系。
  • np.diff(sorted_width)的计算逻辑和你循环里写的sorted_width[i+1] - sorted_width[i]完全等价,直接返回所有相邻差值的数组,不需要手动写循环遍历。
  • NumPy数组做多条件组合筛选时,要用位运算符&(与)、|(或),每个独立判断条件必须用括号包裹,不能用Python原生的and/or关键字,否则会触发真值判断报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:31:11