Numpy的基础操作
定义数组
使用
numpy.array()
函数可以定义一个数组。数组可以是多维的,元素可以是整数、浮点数等。import numpy as np # 定义一维数组 arr1 = np.array([1, 2, 3, 4, 5]) # 定义二维数组 arr2 = np.array([[1, 2, 3], [4, 5, 6]])
均匀分布的数值数组
np.linspace()生产指定范围内的均匀分布的数值数组
使用方法:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
start
:数组的起始值stop
:数组的终止值num
:生成的样本数,默认是 50endpoint
:如果为True
,则包括终止值stop
(默认)。如果为False
,则不包括终止值。retstep
:如果为True
,返回间隔值step
,即相邻元素之间的差值。dtype
:指定返回数组的数据类型axis
:沿着指定轴生成数据(默认是0
)示例:
1.生成一个简单的线性间隔数组:
import numpy as np #这个例子在 0 到 10 之间生成 5 个均匀分布的数值。 arr = np.linspace(0, 10, 5) print(arr)#输出:[ 0 2.5 5 7.5 10 ] #不包含终止值: arr1 = np.linspace(0, 10, 5, endpoint=False) print(arr1) #输出:[0. 2. 4. 6. 8. ]这时候10被排除在外 #返回步长 arr, step = np.linspace(0, 10, 5, retstep=True) print(arr) # 数值[ 0. 2.5 5. 7.5 10. ] print(step) # 步长 2.5 #使用指定的数据类型: arr = np.linspace(0, 1, 6, dtype=int) print(arr) #输出:[0 0 0 0 0 1]
寻找最大值与最小值
使用
numpy.max()
或numpy.amax()
函数可以找到数组中的最大值。可以指定轴来查找特定维度上的最大值。import numpy as np arr2 = np.array([[1, 2, 3], [4, 5, 6]]) # 1 2 3 # 4 5 6 # 查找整个数组的最大值 max_value = np.max(arr2) print(max_value) #输出:6 # 查找每一列的最大值 max_col = np.max(arr2, axis=0) print(max_col) #输出 [4 5 6] # 查找每一行的最大值 max_row = np.max(arr2, axis=1) print(max_row) #输出[3 6]
使用
numpy.argmax()函数是返回最大值的索引
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) max_index = np.argmax(arr) # 查找最大值的索引 print(max_index) # 输出:5,表示最大值6的位置(展平后的索引) # 沿着每列查找最大值的索引 max_index_axis0 = np.argmax(arr, axis=0) print(max_index_axis0) # 输出:[1 1 1],表示每列最大值的索引 # 沿着每行查找最大值的索引 max_index_axis1 = np.argmax(arr, axis=1) print(max_index_axis1) # 输出:[2 2],表示每行最大值的索引
维度上升
使用
numpy.expand_dims()
可以增加数组的维度用法:
numpy.expand_dims(a, axis)
- a:输入的数组。
- axis:指定新轴的插入位置,可以是负数。这个轴会在原数组的维度上增加,返回的新数组会增加一个新的维度。
示例 1:在数组的特定位置插入维度
import numpy as np arr = np.array([1, 2, 3]) # 形状是 (3,) print("原始数组形状:", arr.shape) expanded_arr = np.expand_dims(arr, axis=0) # 在第 0 轴增加新维度 print("增加维度后的数组形状:", expanded_arr.shape)
输出:
原始数组形状: (3,) 增加维度后的数组形状: (1, 3)
示例 2:在另一个位置增加维度
arr = np.array([1, 2, 3]) # 形状是 (3,) expanded_arr = np.expand_dims(arr, axis=1) # 在第 1 轴增加新维度 print("增加维度后的数组形状:", expanded_arr.shape)
输出:
增加维度后的数组形状: (3, 1)
示例 3:在多维数组中使用
expand_dims
arr = np.array([[1, 2], [3, 4]]) # 形状是 (2, 2) print("原始数组形状:", arr.shape) expanded_arr = np.expand_dims(arr, axis=0) # 在第 0 轴增加新维度 print("增加维度后的数组形状:", expanded_arr.shape)
输出:
原始数组形状: (2, 2) 增加维度后的数组形状: (1, 2, 2)
维度下降
使用
numpy.squeeze()
可以减少数组的维度(去除数组中所有维度为 1 的维度)。# 增加维度 arr_expanded = np.expand_dims(arr1, axis=0) # 减少维度 arr_squeezed = np.squeeze(arr_expanded)
数组计算
Numpy 支持对数组进行各种数学运算,如加法、减法、乘法、除法等。这些操作是逐元素进行的。
# 定义一维数组 arr1 = np.array([1, 2, 3, 4, 5]) # 数组加法 result_add = arr1 + arr1 # 数组乘法 result_mul = arr1 * 2 # 数组除法 result_div = arr1 / 2
运行结果
[ 2 4 6 8 10] [ 2 4 6 8 10] [0.5 1. 1.5 2. 2.5]
矩阵 reshape
使用
numpy.reshape()
函数可以改变数组的形状,而不改变其数据。# 将一维数组 reshape 为二维数组 arr_reshaped = arr1.reshape(5, 1) # 将二维数组 reshape 为三维数组 2*3*1的三维数组 arr_reshaped_3d = arr2.reshape(2, 3, 1)
注意:
2×3×1 的三维数组表示有 2 个矩阵、每个矩阵有 3 行,1 列组。
- 第一维(2)表示两个矩阵。
- 第二维(3)表示每个矩阵有 3 行。
- 第三维(1)表示每一行只有一个元素
2×3×1×4 的四维数组四维数组可以被看作是由多个三维数组组成的数组。
- 第一维 2 表示有 2 个 "块"(整体)。
- 第二维 3 表示每个 "块" 中有 3 个矩阵。
- 第三维 1 表示每个矩阵只有 1 行。
- 第四维 4 表示每行有 4 个元素。
矩阵维度转换)
矩阵维度转换就相当于3*2矩阵 转置成2*3矩阵
使用
numpy.transpose()
或numpy.T
可以转置矩阵,交换其行和列。# 定义二维数组 arr2 = np.array([[1, 2, 3], [4, 5, 6]]) # 转置矩阵 arr_transposed = np.transpose(arr2) # 使用 .T 属性进行转置 arr_transposed_T = arr2.T print("二维数组:\n",arr2 ) print("转置的二维数组\n",arr_transposed ) print("转置的二维数组\n",arr_transposed_T )
运行结果:
二维数组: [[1 2 3] [4 5 6]] 转置的二维数组 [[1 4] [2 5] [3 6]] 转置的二维数组 [[1 4] [2 5] [3 6]]
使用np创建一张图
np.zeros()
是numpy
中的一个函数,用于创建一个指定形状的数组,所有元素的值都为 0。np.zeros(shape, dtype=float, order='C')
shape
:指定返回数组的形状,可以是一个整数(表示一维数组)或一个元组(表示多维数组)。dtype
:指定数组的数据类型,默认是float
。order
:指定多维数组的存储顺序。'C'
为按行优先顺序(默认),'F'
为按列优先顺序。示例:
1.创建一维零数组:
import numpy as np arr = np.zeros(5) print(arr) #输出:[0. 0. 0. 0. 0.]
2.创建二维零数组:
arr = np.zeros((3, 4)) # 3行4列的二维数组 print(arr) #输出:[[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]
3.指定数据类型:
arr = np.zeros((2, 3), dtype=int) # 创建一个 2x3 的整数型零数组 print(arr) #输出:[[0 0 0] [0 0 0]]
4.创建一张黑色空白图像,大小为 400x400,3通道(彩色),数据类型为 uint8
blank_img = np.zeros((400, 400, 3), dtype=np.uint8)
5.np.zeros_like()
arr = np.zeros((2, 3), dtype=int) # 创建一个 2x3 的整数型零数组 print(arr) #np.zeros_like( ) 此方法意思是复制一个一样的数组 arr1=np.zeros_like(arr ) print(arr1) #输出:[[0 0 0] [0 0 0]]