Numpy数组
Numpy是Python中一个重要的科学计算库,它提供了一个强大的N维数组对象。在数据分析、计算机视觉、机器学习等领域中,Numpy都扮演着重要的角色。本文将详细介绍Numpy数组的相关知识,让读者对这个重要的数据结构有更深入的理解。
创建Numpy数组
首先,我们来看一下如何创建Numpy数组。可以使用numpy.array()
函数来创建一个数组,该函数接受一个Python列表或元组作为输入,然后返回一个Numpy数组。下面是示例代码:
import numpy as np
# 创建一个一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1)
# 创建一个二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2)
运行上面的代码,会得到以下输出:
[1 2 3 4 5]
[[1 2 3]
[4 5 6]
[7 8 9]]
Numpy数组的属性
Numpy数组有一些重要的属性,可以帮助我们更好地理解和操作数组。下面是一些常用的数组属性:
ndim
:数组的维度shape
:数组的形状,即每个维度的大小size
:数组的总元素个数dtype
:数组的数据类型
接下来我们看看如何获取和操作这些属性:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("数组的维度:", arr.ndim)
print("数组的形状:", arr.shape)
print("数组的元素个数:", arr.size)
print("数组的数据类型:", arr.dtype)
运行上面的代码,会输出如下结果:
数组的维度: 2
数组的形状: (2, 3)
数组的元素个数: 6
数组的数据类型: int64
访问Numpy数组元素
可以通过索引访问Numpy数组中的元素,和Python中的列表类似。但是需要注意的是,Numpy数组的索引是从0开始的。示例代码如下:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr[0]) # 访问第一个元素
print(arr[2]) # 访问第三个元素
print(arr[-1]) # 访问最后一个元素
运行上面的代码,输出如下:
1
3
5
对于多维数组,可以通过逗号分隔的索引访问元素。例如:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr[0, 0]) # 访问第一个元素
print(arr[1, 1]) # 访问第二行、第二列的元素
print(arr[2, -1]) # 访问最后一行、最后一列的元素
输出为:
1
5
9
切片操作
和Python列表类似,Numpy数组支持切片操作。可以通过:
进行切片,格式为start:stop:step
。示例代码如下:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(arr[2:5]) # 获取索引2到4的元素
print(arr[:5]) # 获取前5个元素
print(arr[5:]) # 获取索引5及之后的元素
print(arr[::2]) # 每隔一个元素取一个值
运行上面的代码,会输出如下结果:
[3 4 5]
[1 2 3 4 5]
[ 6 7 8 9 10]
[1 3 5 7 9]
对于多维数组,可以分别对不同维度进行切片操作。示例代码如下:
import numpy as np
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(arr[:2, 1:3]) # 获取第1和第2行,第2和第3列的元素
print(arr[1:, :2]) # 获取索引为1及之后的行,索引为2之前的列
运行上面的代码,会得到如下输出:
[[2 3]
[6 7]]
[[ 5 6]
[ 9 10]]
改变数组形状
有时候我们需要改变数组的形状,可以使用reshape()
方法来实现。需要注意的是,改变形状后数组的元素个数不能发生改变。示例代码如下:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
new_arr = arr.reshape(3, 2)
print(new_arr)
输出为:
[[1 2]
[3 4]
[5 6]]
数组拼接
Numpy数组支持水平和垂直拼接操作,可以使用vstack()
和hstack()
方法来实现。示例代码如下:
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
# 垂直拼接
v_arr = np.vstack((arr1, arr2))
print(v_arr)
# 水平拼接
h_arr = np.hstack((arr1, arr2))
print(h_arr)
运行上面的代码,会输出如下结果:
[[1 2]
[3 4]
[5 6]
[7 8]]
[[1 2 5 6]
[3 4 7 8]]
数组运算
Numpy数组支持各种数学运算,包括加法、减法、乘法、除法等。当操作两个数组时,它们的形状必须相同。示例代码如下:
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
# 加法
add_arr = arr1 + arr2
print(add_arr)
# 乘法
mul_arr = arr1 * arr2
print(mul_arr)
# 矩阵点乘
dot_arr = np.dot(arr1, arr2)
print(dot_arr)
输出为:
[[ 6 8]
[10 12]]
[[ 5 12]
[21 32]]
[[19 22]
[43 50]]
常用函数
Numpy提供了很多常用的数学函数,如sum()
、mean()
、std()
等。这些函数能够对数组进行快速计算,非常方便实用。示例代码如下:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 求和
print(np.sum(arr))
# 求平均值
print(np.mean(arr))
# 求标准差
print(np.std(arr))
运行上面的代码,会输出如下结果:
21
3.5
1.707825127659933
随机数生成
Numpy还提供了随机数生成的功能,可以使用random
模块来生成随机数组。下面是一些示例代码:
import numpy as np
# 随机生成[0, 1)之间的随机数
rand_arr = np.random.rand(2, 3)
print(rand_arr)
# 随机生成整数数组
rand_int_arr = np.random.randint(1, 10, (2, 3))
print(rand_int_arr)
运行上面的代码,会得到类似以下输出:
[[0.5720815 0.62737447 0.11427587]
[0.23510998 0.67989194 0.09514067]]
[[4 7 3]
[3 9 8]]
总结
通过本文的介绍,读者对Numpy数组应该有了更深入的理解。Numpy数组是Python科学计算中的核心数据结构,掌握好Numpy数组的基本操作对于数据分析、计算机视觉和机器学习等领域的工作至关重要。