Numpy 数组操作
NumPy(Numerical Python)是Python中用于科学计算的强大库。它提供了一个高性能的多维数组对象和用于处理这些数组的工具。NumPy提供了灵活的访问数组元素的方式。您可以使用索引和切片操作来检索数组的特定元素或部分。
索引
在NumPy中,索引从0开始,与Python列表类似。您可以通过在方括号中指定索引来访问数组的单个元素。例如,给定一个数组arr,您可以使用arr[i]来访问索引为i的元素。
切片
NumPy数组还支持切片,允许您检索数组的一部分。切片使用冒号(:)运算符进行操作。切片的基本语法是start:stop:step,其中start是起始索引,stop是结束索引(不包含),step是索引之间的增量。
NumPy数组上的切片操作示例−
- arr[2:6]检索索引2到5的元素(不包括6)。
- arr[3:]检索索引3到数组末尾的元素。
- arr[::2]检索元素的步长为2(跳过每个其他元素)。
- arr[::-1]以相反的顺序检索元素。
布尔索引
NumPy允许您使用布尔数组作为掩码,根据特定条件访问元素。例如,您可以创建一个布尔数组,指示数组的哪些元素满足特定条件,然后使用该数组作为掩码来检索相应的元素。
示例
下面是一个布尔索引的示例 −
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
mask = arr > 2
print(arr[mask])
输出
[3, 4, 5]
整数数组索引
NumPy允许您使用整数数组作为索引,以访问特定元素。这种技术称为整数数组索引。通过传递索引数组,您可以检索与这些索引对应的元素。
示例
这是整数数组索引的一个示例−
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
indices = np.array([0, 2, 4])
print(arr[indices])
输出
[1, 3, 5]
通过掌握这些技术,您可以高效地从NumPy数组中提取和处理所需的数据。
数组操作
重塑数组
NumPy允许您使用reshape()函数重塑数组。重塑一个数组会改变其维度,同时保持元素的总数不变。reshape()函数以元组形式接收所需的形状,并返回具有指定维度的新数组。
示例
下面是一个重塑数组的示例 –
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6])
reshaped_arr = arr.reshape((2, 3))
print(reshaped_arr)
输出
[[1 2 3]
[4 5 6]]
在上面的示例中,原始数组arr包含六个元素,被重塑为2×3的数组reshaped_arr。重塑后的数组保留了原始数组的元素,但按指定的形状进行排列。 您还可以使用reshape()函数将多维数组转换为一维数组。通过将形状指定为-1,NumPy会根据元素的总数自动计算适当的维数。
示例
以下是将多维数组转换为一维数组的示例−
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
reshaped_arr = arr.reshape(-1)
print(reshaped_arr)
这将输出:[1 2 3 4 5 6]
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
reshaped_arr = arr.reshape(-1)
print(reshaped_arr)
输出
[1 2 3 4 5 6]
连接数组
NumPy提供了像 numpy.concatenate() 和 numpy.stack() 这样的函数,用于沿不同轴向组合多个数组。连接允许您水平或垂直地连接数组,从而有效地增加它们的大小或将它们组合成一个更大的数组。
- numpy.concatenate() - 此函数沿着现有轴连接数组。默认情况下,它以行方式(轴0)连接数组,但您可以指定 axis 参数以沿不同的轴连接。
示例
这是使用 numpy.concatenate() 连接数组的示例 –
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])
concatenated_arr = np.concatenate((arr1, arr2), axis=0)
print(concatenated_arr)
输出
[[1 2]
[3 4]
[5 6]]
在上面的示例中, arr1 和 arr2 沿轴0连接在一起,生成一个新的数组 concatenated_arr。
- numpy.stack() − 该函数沿新轴堆叠数组。它接受一个数组序列和 axis 参数以指定将要堆叠数组的新轴。
示例
这里有一个使用numpy.stack()堆叠数组的示例−
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
stacked_arr = np.stack((arr1, arr2), axis=1)
print(stacked_arr)
输出
[[1 4]
[2 5]
[3 6]]
在上面的示例中, arr1 和 arr2 沿着一个新的轴(轴 1)堆叠在一起,结果得到一个新的数组 stacked_arr.
数组上的数学运算
基本算术运算
NumPy 允许您对数组进行基本的算术运算,如加法、减法、乘法和除法。这些运算是逐元素进行的,即对数组的相应元素逐个进行运算。
示例
这里是数组上基本算术运算的示例−
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
addition = arr1 + arr2
subtraction = arr1 - arr2
multiplication = arr1 * arr2
division = arr1 / arr2
print(addition)
print(subtraction)
print(multiplication)
print(division)
输出
[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4 0.5 ]
在上面的示例中,基本的算术操作是按元素逐个应用于arr1和arr2的相应元素中,结果是新的数组加法、减法、乘法和除法。
数学函数
NumPy提供了一系列广泛的数学函数,可以逐元素地应用于数组。这些函数包括三角函数、对数函数、指数函数等。
示例
以下是将数学函数应用于数组的示例-
import numpy as np
arr = np.array([1, 2, 3])
sin_values = np.sin(arr)
log_values = np.log(arr)
exp_values = np.exp(arr)
print(sin_values)
print(log_values)
print(exp_values)
输出
[0.84147098 0.90929743 0.14112001]
[0. 0.69314718 1.09861229]
[ 2.71828183 7.3890561 20.08553692]
在上面的示例中,np.sin(),np.log()和np.exp()函数逐元素应用于数组arr,结果是新的数组sin_values,log_values和exp_values。
统计函数
NumPy提供了各种统计函数,用于计算数组的统计量。这些函数包括计算均值、标准差、最小值、最大值等。
示例
以下是对数组使用统计函数的示例−
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
mean_value = np.mean(arr)
std_value = np.std(arr)
min_value = np.min(arr)
max_value = np.max(arr)
print(mean_value)
print(std_value)
print(min_value)
print(max_value)
输出
3.0
1.4142135623730951
1
5
在上面的示例中,使用np.mean()、np.std()、np.min()和np.max()函数计算了数组arr的平均值、标准差、最小值和最大值。
结论
NumPy数组是Python科学计算的基本数据结构。我们学习了使用NumPy数组的基本知识,包括创建数组、访问元素、调整形状、进行数学运算和比较数组。