geekdoc-python-zh/docs/askpython/numpy-nansum.md

5.0 KiB
Raw Permalink Blame History

NumPy nan sum完整指南

原文:# t0]https://www . aspython . com/python-modules/num py/numpy-nansum

你好,欢迎来到这个关于 Numpy nansum 的教程。在本教程中,我们将学习 NumPy nansum()方法,也将看到许多关于这个方法的例子。让我们开始吧!

也读作:NumPy nanprod——完全指南


什么是 NumPy nansum

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

NumPy 中的nansum()方法是一个函数,它返回通过将数组中的 NaN 值视为等于 0 而计算出的数组元素之和。它可以是所有数组元素的总和、沿行数组元素的总和或沿列数组元素的总和。

我们将在本教程的下一节看到每个例子。


NumPy nansum 的语法

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

| 参数 | 描述 | 必需/可选 | | (类似数组) | 需要求和的输入数组。 | 需要 | | 轴 | 要沿其计算数组总和的轴。它可以是 axis=0即沿列也可以是 axis=1即沿行或者 axis=None这意味着要返回整个数组的总和。 | 可选择的 | | 数据类型 | 要返回的数组的数据类型。 | 可选择的 | | 在外 | 放置结果的替代输出数组。它必须具有与预期输出相同的形状。 | 可选择的 | | keepdims (bool) | 如果设置为真,减少的轴将作为尺寸为 1 的尺寸留在结果中。使用此选项,结果将根据输入数组正确传播。 | 可选择的 | | 最初的 | 总和的起始值。 | 可选择的 | | 在哪里 | 要包含在总和中的元素。 | 可选择的 |

返回: 一个与 a 形状相同的数组,如果轴不为 None则包含沿给定轴将 NaN 值视为 0 的 a 的元素之和。如果 axis=None则返回一个标量它是整个数组的总和。


Numpy.nansum()的示例

现在让我们来看一些例子。

使用 Numpy.nansum()对整个数组求和

一维数组

import numpy as np

a = np.array([10, np.nan, 5, 3, np.nan])
ans = np.nansum(a)
print("a =", a)
print("Sum of the array =", ans)

输出:

a = [10\. nan  5\.  3\. nan]
Sum of the array = 18.0

这里,通过将所有 NaN 值视为零来计算数组的总和。因此,总和= 10+0+5+3+0 = 18。

二维数组

import numpy as np

a = np.array([[10, np.nan, 5], [np.nan, 2, 6]])
ans = np.nansum(a)
print("a =", a)
print("Sum of the array =", ans)

输出:

a = [[10\. nan  5.]
 [nan  2\.  6.]]
Sum of the array = 23.0

类似于上面的例子sum = 10+0+5+0+2+6 = 23。


使用 Numpy.nansum()沿轴求和

逐列求和

import numpy as np

a = np.array([[10, np.nan, 5], 
[np.nan, 2, 6]])
# sum along axis=0 i.e. columns 
ans = np.nansum(a, axis = 0)
print("a =", a)
print("Sum of the array =", ans)

输出:

a = [[10\. nan  5.]
 [nan  2\.  6.]]
Sum of the array = [10\.  2\. 11.]

axis=0 指定按列计算总和。 第 0 列总和= 10+0 = 10 第 1 列总和= 0+2 =2 第 2 列总和= 5+6 = 11

逐行求和

import numpy as np

a = np.array([[10, np.nan, 5], 
[np.nan, 2, 6]])
# sum along axis=1 i.e. rows 
ans = np.nansum(a, axis = 1)
print("a =", a)
print("Sum of the array =", ans)

输出:

a = [[10\. nan  5.]
 [nan  2\.  6.]]
Sum of the array = [15\.  8.]

将 NaN 值视为 0 第 0 行总和= 10+0+5 = 15 第 1 行总和= 0+2+6 = 8


包含无穷大的数组的和

import numpy as np

# array containing +infinity
a = np.array([8, 4, np.nan, np.inf, 13])
# array containing -infinity
b = np.array([8, 4, np.nan, np.NINF, 13])
# array containing +infinity and -infinity
c = np.array([8, 4, np.nan, np.inf, np.NINF, 13])

sum_a = np.nansum(a)
sum_b = np.nansum(b)
sum_c = np.nansum(c)

print("a =", a)
print("Sum of the array a =", sum_a)
print("b =", b)
print("Sum of the array b =", sum_b)
print("c =", c)
print("Sum of the array c =", sum_c)

输出:

a = [ 8\.  4\. nan inf 13.]
Sum of the array a = inf
b = [  8\.   4\.  nan -inf  13.]
Sum of the array b = -inf
c = [  8\.   4\.  nan  inf -inf  13.]
Sum of the array c = nan

在上面的代码中NINF 表示-无穷大INF 表示无穷大。请注意,如果数组包含正无穷大,则总和为正无穷大,如果数组包含负无穷大,则总和为负无穷大。如果数组同时包含正无穷大和负无穷大,则数组的和为 NaN。


结论

仅此而已!在本教程中,我们学习了 Numpy nansum 方法,并使用相同的方法练习了不同类型的示例。如果你想了解更多关于 NumPy 的信息,请随意浏览我们的 NumPy 教程


参考