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

无迭代实现一维数组中零值分隔段数值的质心及位置计算

一维序列非零段质心计算方案

首先修正示例数组的无效语法:原代码中05不符合Python整数书写规则,修改为5即可。

完整实现代码

import numpy as np

a = np.array([0,0,0,8,13,12,5,0,0,0,5,6,8,14,0,0,0]) 

# 生成非零值掩码
mask = a != 0
# 为每个连续非零段分配唯一整数标签,零值区域标签统一为0
padded_mask = np.pad(mask, (1, 1), constant_values=False)
labels = np.cumsum(np.diff(padded_mask) == 1) * mask

# 计算质心所需的分组统计量,全程使用向量化操作无迭代
indices = np.arange(len(a))
# 分组数值总和
sum_vals = np.bincount(labels, weights=a)
# 分组 位置*数值 总和
sum_pos_vals = np.bincount(labels, weights=indices * a)

# 过滤零值区域,计算最终结果
valid_mask = sum_vals != 0
# 优先输出的质心位置(原数组坐标)
centroid_positions = sum_pos_vals[valid_mask] / sum_vals[valid_mask]
# 对应质心数值
centroid_values = sum_vals[valid_mask] / np.bincount(labels)[valid_mask]

结果说明

  • 质心位置采用标准一维数值加权平均规则计算:质心位置 = Σ(位置i * 数值i) / Σ数值i
  • 示例数组的计算结果为2段非零区域的对应值:
    • 第一段(位置3~6,数值[8,13,12,5]):质心位置约为4.316,质心数值为9.5
    • 第二段(位置10~13,数值[5,6,8,14]):质心位置约为11.848,质心数值为8.25
  • 所有运算均为numpy向量化实现,无任何显式迭代逻辑,大数组下性能表现优异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:15:03