技术文章和资源

技术文章(时间排序)

热门类别

Python PHP MySQL JDBC Linux

Python - Numpy 数组上的操作

pythonnumpyserver side programmingprogramming

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 被重塑为 2x3 数组 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]

连接数组

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]]

在上面的例子中,arr1arr2沿轴 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 ]

在上面的例子中,基本算术运算按元素方式应用于 arr1arr2 的相应元素,从而产生新的数组加法、减法、乘法和除法。

数学函数

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 数组的基本知识,包括创建数组、访问元素、操作其形状、执行数学运算和比较数组。


相关文章