python常见数组操作
Python中一些常见的数组操作的总结:
1. 基本操作
创建数组:
arr = [1, 2, 3, 4, 5] # 列表创建
import numpy as np
arr_np = np.array([1, 2, 3, 4, 5]) # NumPy数组创建
访问元素:
element = arr[0] # 访问第一个元素
切片:
sub_arr = arr[1:3] # 访问第二个到第三个元素(不包括第三个)
长度:
length = len(arr)
2. 修改数组
添加元素:
arr.append(6) # 在列表末尾添加元素
arr_np = np.append(arr_np, 6) # 在NumPy数组末尾添加元素
插入元素:
arr.insert(0, 0) # 在列表开头插入元素
删除元素:
del arr[0] # 删除第一个元素
arr.pop() # 删除并返回最后一个元素
arr.remove(2) # 删除第一个出现的元素2
修改元素:
arr[0] = 10 # 修改第一个元素
3. 数组运算
数学运算:
arr_np2 = np.array([10, 20, 30, 40, 50])
addition = arr_np + arr_np2 # 元素相加
subtraction = arr_np - arr_np2 # 元素相减
multiplication = arr_np * arr_np2 # 元素相乘
division = arr_np / arr_np2 # 元素相除
累积运算:
sum_arr = np.sum(arr_np) # 求和
prod_arr = np.prod(arr_np) # 求积
mean_arr = np.mean(arr_np) # 求平均值
4. 统计操作
最大值和最小值:
max_val = np.max(arr_np) # 最大值
min_val = np.min(arr_np) # 最小值
排序:
arr.sort() # 列表排序
sorted_arr_np = np.sort(arr_np) # NumPy数组排序
查找元素:
index = np.where(arr_np == 3) # 查找元素3的索引
5. 形状操作
改变形状:
reshaped_arr = arr_np.reshape(2, 3) # 改变NumPy数组形状
合并和分割:
concatenated_arr = np.concatenate((arr_np, arr_np2)) # 合并数组
split_arr = np.split(arr_np, 2) # 分割数组
6. 布尔操作
逻辑运算:
bool_arr = arr_np > 3 # 创建布尔数组
布尔索引:
filtered_arr = arr_np[bool_arr] # 根据布尔数组过滤元素
7. 线性代数
点积:
dot_product = np.dot(arr_np, arr_np2)
矩阵乘法:
matrix_product = np.matmul(arr_np.reshape(2, 3), arr_np2.reshape(3, 2))
当然,Python中的数组操作可以非常复杂和强大,特别是当你使用NumPy、SciPy、Pandas等库时。以下是一些更高级的数组操作:
8. 广播
NumPy会“广播”较小的数组以匹配较大数组的形状。
import numpy as np
a = np.array([1, 2, 3])
b = np.array([[1], [2], [3]])
result = a + b # 广播使得a的形状变为(3, 1)并进行元素相加
9. 随机数生成
NumPy可以生成各种分布的随机数.
# 生成随机数
rand = np.random.rand(2, 3) # 0到1之间的随机数
randn = np.random.randn(2, 3) # 标准正态分布的随机数
10. 线性代数
NumPy和SciPy提供了大量的线性代数功能,包括矩阵分解、求解线性方程组等。
# 矩阵乘法
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = np.dot(A, B)
# 求解线性方程组
from scipy.linalg import solve
A = np.array([[3, 1], [1, 2]])
B = np.array([9, 8])
X = solve(A, B)
11. 傅里叶变换
NumPy和SciPy提供了傅里叶变换和逆变换的功能.
from scipy.fft import fft, ifft
x = np.array([0, 1, 0, 0])
y = fft(x)
x_reconstructed = ifft(y)
12. 信号处理
SciPy提供了信号处理模块,可以进行滤波、卷积等操作。
from scipy import signal
# 滤波
data = np.array([0, 1, 2, 3, 4, 5])
filtered_data = signal.convolve(data, [1, 1, 1], mode='same')
13. 多维数组索引和切片
NumPy允许你使用复杂的索引和切片操作来处理多维数组。
arr = np.arange(24).reshape(2, 3, 4)
# 使用布尔索引
bool_idx = arr > 10
arr[bool_idx] = 10
# 使用花式索引
x, y, z = np.indices((2, 3, 4))
arr[x + 1, y + 1, z + 1] = 42