np.sum

np.sum 详解

np.sum 是 NumPy 提供的一个函数,用于计算数组中元素的总和。它支持多种灵活的用法,包括对整个数组求和、按特定轴求和、指定加权求和等。是数据分析和数值计算中常用的函数之一。


1. 函数签名

numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)

2. 参数详解

必选参数
  • a
    • 输入数组,可以是任何形式的 NumPy 数组或支持广播的对象(如列表、元组等)。
可选参数
  1. axis

    • 指定求和的轴(维度)。
    • 默认值:None(即对所有元素求和)。
    • 取值:
      • None:对整个数组的所有元素求和。
      • int:沿指定的轴进行求和。
      • tuple:指定多个轴,对这些轴进行广播后求和。
  2. dtype

    • 指定计算时的结果数据类型。
    • 默认使用输入数组的类型,但如果结果可能超出范围(例如整型溢出),可以设置为更高的精度(如 float64int64)。
  3. out

    • 将结果存储到指定的数组中,而不是返回新的数组。
    • 默认值:None
  4. keepdims

    • 是否保持求和操作后数组的维度。
    • 默认值:False,会丢弃求和的维度。
  5. initial

    • 求和的初始值,默认是 0
  6. where

    • 一个布尔掩码数组,指定在哪些位置进行求和操作。
    • 例如,where=[True, False, True],只会对第 1 和第 3 个元素求和。

3. 返回值

  • 返回求和结果。
  • 如果指定 axis,返回一个降维后的数组,否则返回一个标量。

4. 示例

(1) 对整个数组求和
import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6]])
result = np.sum(a)
print(result)  # 输出 21
(2) 沿指定轴求和
  • 沿 (轴 0)求和:
result = np.sum(a, axis=0)
print(result)  # 输出 [5 7 9]
  • 沿 (轴 1)求和:
result = np.sum(a, axis=1)
print(result)  # 输出 [ 6 15]
(3) 指定数据类型
b = np.array([1, 2, 3], dtype=np.int8)
result = np.sum(b, dtype=np.int32)
print(result)  # 输出 6(以更高精度计算结果)
(4) 使用布尔条件求和
c = np.array([1, 2, 3, 4, 5])
mask = c % 2 == 0  # 条件:取偶数
result = np.sum(c, where=mask)
print(result)  # 输出 6(即 2 + 4)
(5) 保持维度
d = np.array([[1, 2, 3], [4, 5, 6]])
result = np.sum(d, axis=1, keepdims=True)
print(result)
# 输出:
# [[ 6]
#  [15]]

5. 应用场景

  1. 矩阵计算:对特定维度的数据求和,如行和、列和。
  2. 统计分析:计算数据的总和,用于后续均值、方差等计算。
  3. 布尔数组处理:统计布尔条件满足的数量。
    • np.sum(condition_array) 等价于 np.count_nonzero(condition_array)
  4. 加权求和:通过 where 参数选择性求和。

6. 注意事项

  1. 数据溢出

    • 对整型数组求和时可能发生溢出,尤其是低精度数据类型(如 int8)。
    • 解决方法:通过 dtype 指定更高精度的数据类型。
  2. axis 的用法

    • 对多维数组,axis 参数的选择会影响结果的形状。
    • 举例:对于形状为 ((3, 4, 5)) 的数组,axis=1 将结果降维到 ((3, 5))。

7. 底层原理

np.sum 是一个高效的矢量化操作,底层实现利用了 C 和 Fortran 进行优化,计算效率非常高。与 Python 的内置 sum() 函数相比,它可以直接在多维数组上操作,并支持并行化计算。


总结

np.sum 是 NumPy 提供的一个灵活且高效的数组求和函数,支持从简单的全数组求和到复杂的按条件加权求和等多种功能。在数据科学和数值计算中,np.sum 是一个必不可少的工具,使用时需灵活掌握其参数来适配不同需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值