NumPy nancumsum – 完整指南

您好,欢迎来到Numpy nancumsum教程 在之前的教程中,我们学习了NumPy cumsumNumPy nansum在本教程中,我们将学习 NumPy nancumsum() 方法,并看到许多相关示例。那么让我们开始吧!

推荐阅读:NumPy cumsum、  NumPy nansum


什么是 NumPy nancumsum?

在 Python 中,  NaN 表示 不是数字如果我们有一个包含一些 NaN 值的数组并且想要找到它的累积和,我们可以使用 nancumsum() NumPy 中的方法。

累积  是给定序列的部分和的序列。如果 {a, b, c, d, e, f,…..} 是一个序列,则其累积和表示为 {a, a+b, a+b+c, a+b+c+d,… .} .

NumPy中的方法 nancumsum() 是一个函数,返回将数组中的NaN值视为等于0计算出的数组元素的累积和。它可以是展平数组的累积和,也可以是数组元素沿行或沿列的数组元素的累积和。 

我们将在本教程的后续部分中看到每个示例的示例。


NumPy nancumsum 的语法

numpy.nancumsum(a, axis=None, dtype=None, out=None)
范围 描述 必需/可选
A 输入数组。 必需的
计算数组累积和的轴。它可以是 axis=0 或 axis=1 或 axis=None ,这意味着要返回展平数组的累积和。 选修的
dtype(数据类型) 要返回的数组的数据类型。 选修的
出去 用于放置结果的替代输出数组。它必须具有与预期输出相同的形状和长度。 选修的

返回:
包含输出的新数组,即通过将 NaN 值视为等于零的累积和。如果 提到了out  ,则返回对其的引用。


numpy.nancumsum() 方法示例

现在让我们通过一些示例来了解如何使用此功能。

单个元素的累计和

import numpy as np
 
a = 8
ans_a = np.nancumsum(a)
 
b = np.nan
ans_b = np.nancumsum(b)
 
print("a =", a)
print("Cumulative sum of a =", ans_a)
 
print("b =", b)
print("Cumulative sum of b =", ans_b)

输出:

a = 8
Cumulative sum of a = [8]
b = nan
Cumulative sum of b = [0.]

包含 NaN 的一维数组的累积和

import numpy as np
 
arr = [7, 8, np.nan, 10, np.nan, np.nan]
ans = np.nancumsum(arr)
 
print("arr =", arr)
print("Cumulative sum of arr =", ans)

输出:

arr = [7, 8, nan, 10, nan, nan]
Cumulative sum of arr = [ 7. 15. 15. 25. 25. 25.]

在上面的代码中,数组包含 3 个 NaN 值。在计算累积和时,该nancumsum()方法将这些值视为等于零。因此,累积和计算为 7, 7+8, 7+8+0, 7+8+0+10, 7+8+0+10+0, 7+8+0+10+0+0结果是 7, 15, 15, 25, 25, 25。


包含 NaN 的二维数组的累积和

import numpy as np
 
arr = [[5, np.nan, 3], [np.nan, 2, 1]]
ans = np.nancumsum(arr)
 
print("arr =", arr)
print("Cumulative sum of arr =", ans)

输出:

arr = [[5, nan, 3], [nan, 2, 1]]
Cumulative sum of arr = [ 5.  5.  8.  8. 10. 11.]

对于二维数组,当没有提到轴时,首先将数组展平,然后将 NaN 视为 0 来计算其累积和。

在上面的例子中,数组首先被展平为 [5, np.nan, 3, np.nan, 2, 1] 即按行,然后其累积和计算为 [5, 5+0, 5+0 +3, 5+0+3+0, 5+0+3+0+2, 5+0+3+0+2+1] 得到数组 [5, 5, 8, 8, 10, 11 ] 由函数返回。


沿轴的累积和将 NaN 视为 0

轴=0

import numpy as np
 
arr = [[8, np.nan, 6], [np.nan, 10, 20]]
# cumulative sum along axis=0
ans = np.nancumsum(arr, axis=0)
 
print("arr =\n", arr)
print("Cumulative sum of arr =\n", ans)

输出:

arr =
 [[8, nan, 6], [nan, 10, 20]]
Cumulative sum of arr =
 [[ 8.  0.  6.]
 [ 8. 10. 26.]]

将 NaN 视为 0,第一行保持原样。第二行包含计算为8+0、0+10、6+20即8、10和26的累积和。即,累积和是按列计算并以行的形式存储的。

轴=1

import numpy as np
 
arr = [[8, np.nan, 6], [np.nan, 10, 20]]
# cumulative sum along axis=1
ans = np.nancumsum(arr, axis=1)
 
print("arr =\n", arr)
print("Cumulative sum of arr =\n", ans)

输出:

arr =
 [[8, nan, 6], [nan, 10, 20]]
Cumulative sum of arr =
 [[ 8.  8. 14.]
 [ 0. 10. 30.]]

此处,第一列保持原样,第二列包含计算为 8+0, 0+10 的累积和,结果为 8, 10,第三列包含累积和 8+0+6, 0+10+ 20即14和30。即按行计算累加和并以列的形式存储。


结论

就这样!在本教程中,我们了解了 Numpy nancumsum 方法,并使用该方法练习了不同类型的示例。您可以从此处的 NumPy 教程了解有关 NumPy 的更多信息。


参考