Numpy 数组按数字求和
在数据分析和机器学习中,对数组进行求和是一种常见的操作。Numpy提供了多种函数来实现这个任务,其中sum()函数尤为重要。
阅读更多:Numpy 教程
实现数组求和
在Numpy中,我们可以使用sum()函数来求解数组中所有元素的和。下面是一个简单的例子:
import numpy as np
a = np.array([1, 2, 3, 4, 5])
print(np.sum(a)) # 15
上述代码中,我们使用np.array()函数来创建一个Numpy数组。然后使用sum()函数来计算该数组中所有元素的和。
虽然上述代码只是处理了一维数组,但sum()函数同样适用于多维数组。下面是对一个二维数组进行求和的例子:
a = np.array([[1, 2], [3, 4]])
print(np.sum(a)) # 10
同样,对于多维数组,sum()函数可以按照任意维度计算其元素的和。例如,可以使用axis参数来指定要沿着哪个维度进行求和。下面的例子计算了一个三维数组沿第二个维度(即列)的和:
a = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(np.sum(a, axis=1)) # [[ 4, 6], [12, 14]]
如果不指定axis参数,sum()函数会将整个数组的所有元素相加并返回一个标量值。
此外,Numpy还提供了其他的数组求和函数,其中一些函数非常有用。例如,可以使用cumsum()函数来计算数组中每个元素的累积和。以下是一个简单的例子:
a = np.array([1, 2, 3, 4, 5])
print(np.cumsum(a)) # [ 1, 3, 6, 10, 15]
还可以使用trapz()函数计算积分。下面的例子计算了一个由Numpy函数生成的一个随机数组的积分:
from numpy import trapz
from numpy import exp, sin
a = np.array([exp(-x/3.0) * sin(x) for x in range(6)])
print(trapz(a)) # 0.23750605964
列求和
在实际的数据处理中,经常需要计算矩阵的列的和。这在统计学分析中是很常见的,例如计算人均GDP、人口总数等。
我们可以简单地实现列求和的方法是用numpy.sum()函数并设置axis参数为0(列),如下所示:
import numpy as np
# 4×6的二维数组arr
arr = np.array([[1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18],[19,20,21,22,23,24]])
# arr的每列元素的和,并打印
sum_arr = np.sum(arr,axis=0)
print(sum_arr)
上述代码中,使用np.array函数创建了一个四行六列的二维数组,存放数据。接着使用np.sum函数求出每列的和。注意这里的axis参数,它默认计算所有元素的和,故需要设置为0才能计算每列的和。
行求和
完全可以参照上面的方法实现对数组的行求和,只需将axis参数设置为1即可。如下所示:
import numpy as np
# 4×6的二维数组arr
arr = np.array([[1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18],[19,20,21,22,23,24]])
# arr的每行元素的和,并打印
sum_arr = np.sum(arr,axis=1)
print(sum_arr)
这一次我们把axis参数设为了1,这就是我们计算每行元素的和的方式。
求和运算符
在Python中进行求和也可以使用普通的运算符。但是为什么要使用NumPy呢?因为Numpy数组可以进行广播,也就是说可以将不同形状的数组进行运算。这意味着你可以省略很多显式的循环,这样可以提高运算速度。
我们可以使用‘+’和‘*’符号完成两个数组之间逐元素的加、乘运算。下面这个例子中,我们创建了两个形状相等的数组,并使用‘+’运算符计算它们之间逐元素的和:
import numpy as np
# 数组加法
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a + b
print(c) # [5, 7, 9]
矩阵的乘法
除了求和外,Numpy还提供了矩阵与向量、矩阵之间的乘法功能。在进行矩阵乘法时,需要使用dot()函数。
下面是一个简单的例子,将一个向量乘以矩阵:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([[4, 5, 6], [7, 8, 9], [10, 11, 12]])
c = np.dot(a, b)
print(c) # [54 66 78]
在此例中,我们创建了一个向量a和一个矩阵b,将它们乘在一起得到了结果向量c。
注意,矩阵乘法与逐元素的乘法是有本质差别的,使用*符号进行逐元素的乘法,使用dot()函数进行矩阵乘法。
实例
下面的例子演示了如何使用NumPy计算一组数据的平均值:
import numpy as np
# 平均数函数
def mean(numbers):
return np.sum(numbers) / len(numbers)
# 计算平均数
data = [1.7, 2.3, 1.9, 4.2, 5.4, 6.0, 2.8, 4.5]
mean_val = mean(data)
print("Mean:", mean_val)
在这个例子中,我们定义了一个名为mean()的函数,该函数计算一组数据的平均值。然后,我们创建了一组数据并使用该函数计算其平均值。
总结
在本篇文章中,我们介绍了如何使用Numpy中的sum()函数对数组进行求和。我们还介绍了在矩阵处理中如何对列、行进行求和。此外,我们还用实例说明了如何使用NumPy计算一组数据的平均值和使用NumPy进行矩阵乘法。Numpy在数据处理中是一个不可或缺的利器,应该加以学习和掌握。
极客教程