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

如何对Numpy数组按行分别求和偶数列与奇数列?

解决NumPy按行对奇偶索引列求和的问题

我来帮你搞定这个问题!你遇到的核心问题是没有指定求和的轴方向,而且误用了Python内置的sum()函数,导致得到的是列维度的总和,而不是你需要的每行单独求和的结果。

问题分析

你的代码里用了sum(lines[:,::2]),这里的sum是Python内置函数,它会把NumPy数组当成可迭代对象,沿着第一个轴(行)对每一列的元素累加,最终得到的是列的总和数组,而不是每行的求和结果。这就是为什么你得到的d_dn.size和d_up.size和原数组行数(301)完全不匹配的原因。

正确实现步骤

要实现你想要的“每行保留第一个元素,再分别对奇数索引列、偶数索引列(除第一个外)求和”的需求,我们需要用NumPy的np.sum()并指定axis=1参数,明确告诉它按行对列元素求和。

完整代码示例

import numpy as np

# 模拟你的输入数组(这里用你给出的样例数据)
lines = np.array([
    [-18.29750213, 0.1, -0.1, 0.4, -0.8],
    [-18.20350213, 0.7, -0.2, 0.1, -0.3],
    [-18.11050213, 0.5, -0.6, 0.2, -0.1],
    [9.49249787, 0.5, -0.6, 0.2, -0.2],
    [9.58649787, 0.3, -0.3, 0.7, -0.8],
    [9.67949787, 0.2, -0.6, 0.5, -0.1]
])

# 1. 提取每行的第一个元素(列0)
col0 = lines[:, 0]

# 2. 对每行的奇数索引列(列1、3)求和,axis=1表示按行求和
sum_odd_cols = np.sum(lines[:, 1::2], axis=1)

# 3. 对每行的偶数索引列(列2、4)求和
sum_even_cols = np.sum(lines[:, 2::2], axis=1)

# 4. 拼接三个数组,得到每行对应的结果:[列0值, 奇数列和, 偶数列和]
result = np.column_stack((col0, sum_odd_cols, sum_even_cols))

# 按你想要的格式打印结果
for row in result:
    print(f"{row[0]} {row[1]}({row[1]:.1f}即原行奇数列和) {row[2]}({row[2]:.1f}即原行偶数列和)")

输出结果(样例部分)

-18.29750213 0.5(0.5即原行奇数列和) -0.9(-0.9即原行偶数列和)
-18.20350213 0.8(0.8即原行奇数列和) -0.5(-0.5即原行偶数列和)
-18.11050213 0.7(0.7即原行奇数列和) -0.7(-0.7即原行偶数列和)
...

关键知识点

  • np.sum()的axis参数:axis=1表示沿着列的方向求和(即对每行的元素求和),返回的数组长度和原数组的行数一致(你的情况是301);如果不指定axis,默认会把整个数组扁平化后求和,得到一个标量。
  • 避免混用Python内置sum()和NumPy数组:Python的sum()对NumPy数组的处理逻辑和np.sum()不同,它会迭代数组的第一个轴,最终得到列的总和,这不是你需要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:12:17