Numpy是Python生态中用于科学计算的核心库,其提供的多维数组对象ndarray和一系列数组操作、矩阵计算函数,是数据分析、机器学习等领域的基础工具。掌握Numpy的数组操作和矩阵计算技巧,能够大幅提升数值计算的效率。

Numpy数组基础操作技巧
数组创建与基本属性
使用Numpy创建数组是最基础的操作,常见的方式包括从列表转换、生成特殊数组等。我们可以通过ndarray的属性快速获取数组的形状、维度、数据类型等信息。
import numpy as np
# 从列表创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
# 创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
# 创建全0数组,指定形状为(2,3)
zeros_arr = np.zeros((2, 3))
# 创建全1数组,指定形状为(3,2)
ones_arr = np.ones((3, 2))
# 创建等差数组,从0到10,步长为2
range_arr = np.arange(0, 10, 2)
print("一维数组形状:", arr1.shape)
print("二维数组维度:", arr2.ndim)
print("二维数组数据类型:", arr2.dtype)
print("全0数组:n", zeros_arr)
print("等差数组:", range_arr)
数组常用操作技巧
实际开发中经常需要对数组进行维度变换、拼接、切片等操作,Numpy提供了对应的高效方法。
- 维度变换:使用
reshape方法可以改变数组的形状,前提是变换前后元素总数一致 - 数组拼接:
np.concatenate可以按指定轴拼接多个数组,np.vstack和np.hstack分别对应垂直和水平拼接 - 数组切片:和Python列表类似,支持多维切片操作,且切片返回的是原数组的视图,修改会影响原数组
import numpy as np
arr = np.arange(12)
# 将一维数组转换为3行4列的二维数组
reshaped_arr = arr.reshape(3, 4)
print("变换形状后的数组:n", reshaped_arr)
# 垂直拼接两个二维数组
arr_a = np.array([[1, 2], [3, 4]])
arr_b = np.array([[5, 6], [7, 8]])
v_stack = np.vstack((arr_a, arr_b))
print("垂直拼接结果:n", v_stack)
# 水平拼接两个二维数组
h_stack = np.hstack((arr_a, arr_b))
print("水平拼接结果:n", h_stack)
# 二维数组切片,取所有行的第1到2列(索引从0开始)
slice_arr = reshaped_arr[:, 1:3]
print("切片结果:n", slice_arr)
矩阵计算实战解析
基础矩阵运算
矩阵计算是Numpy的核心能力之一,支持矩阵转置、加法、减法、对应元素乘法等操作。
| 操作类型 | Numpy实现方法 | 说明 |
|---|---|---|
| 矩阵转置 | arr.T 或 np.transpose(arr) | 行列互换,二维数组转置后形状从(m,n)变为(n,m) |
| 矩阵加法/减法 | arr1 + arr2 或 np.add(arr1, arr2) | 要求两个矩阵形状一致,对应元素相加/减 |
| 对应元素乘法 | arr1 * arr2 或 np.multiply(arr1, arr2) | 要求两个矩阵形状一致,对应元素相乘 |
import numpy as np
# 创建两个形状相同的矩阵
matrix_a = np.array([[1, 2, 3], [4, 5, 6]])
matrix_b = np.array([[7, 8, 9], [10, 11, 12]])
# 矩阵转置
transpose_a = matrix_a.T
print("矩阵A转置结果:n", transpose_a)
# 矩阵加法
add_result = matrix_a + matrix_b
print("矩阵加法结果:n", add_result)
# 对应元素乘法
multiply_result = matrix_a * matrix_b
print("对应元素乘法结果:n", multiply_result)
矩阵乘法实战
矩阵乘法是矩阵计算中最常用的操作,需要注意和对应元素乘法的区别,矩阵乘法要求前一个矩阵的列数等于后一个矩阵的行数,使用np.dot或者@运算符实现。
import numpy as np
# 创建两个满足矩阵乘法条件的矩阵,A为2行3列,B为3行2列
matrix_a = np.array([[1, 2, 3], [4, 5, 6]])
matrix_b = np.array([[7, 8], [9, 10], [11, 12]])
# 使用np.dot计算矩阵乘法
dot_result1 = np.dot(matrix_a, matrix_b)
# 使用@运算符计算矩阵乘法
dot_result2 = matrix_a @ matrix_b
print("矩阵乘法结果(np.dot):n", dot_result1)
print("矩阵乘法结果(@运算符):n", dot_result2)
实战场景:线性方程组求解
矩阵计算可以应用到线性方程组求解的场景中,对于线性方程组Ax=b,其中A是系数矩阵,b是常数矩阵,x是未知量矩阵,可以通过np.linalg.solve快速求解。
例如求解方程组:
2x + y = 5
x + 3y = 6
对应的系数矩阵A为[[2,1],[1,3]],常数矩阵b为[5,6],求解代码如下:
import numpy as np
# 系数矩阵A
A = np.array([[2, 1], [1, 3]])
# 常数矩阵b
b = np.array([5, 6])
# 求解线性方程组
x = np.linalg.solve(A, b)
print("方程组的解为:", x)
# 验证结果,计算A@x是否等于b
print("验证结果:", np.allclose(A @ x, b))