python|100个|numpy案例
作者:YXN-python 阅读量:49 发布日期:2023-04-16
1. 导入Numpy - 你的科学计算超级引擎
import numpy as np
2. np.array() - 创建数组,像变魔术一样
arr = np.array([1, 2, 3]) # 数列转数组
3. shape和size - 查看维度和元素总数
arr.shape, arr.size # (3,), 3
4. reshape() - 变形操作,重塑数组结构
arr.reshape((2, 3)) # 重塑为2x3矩阵
5. dtype - 数据类型检查,确保精度
arr.dtype # <class 'numpy.int64'>
6. numpy.arange() - 等差数列生成器,像钢琴键一样排列
np.arange(5) # [0, 1, 2, 3, 4]
7. zeros(), ones() - 快速创建全零或全一数组
np.zeros(5), np.ones(5) # [0., 0., 0., 0., 0.], [1., 1., 1., 1., 1.]
8. random模块 - 娱乐与科学并存的随机数生成
np.random.rand(3) # 生成3个0-1之间的浮点随机数
9. sort()和argsort() - 排序和索引排序,数据有序进行
arr = np.array([3, 1, 4, 1, 5, 9])
arr.sort(), arr.argsort() # ([1, 1, 3, 4, 5, 9], array([3, 1, 4, 0, 2, 5]))
10. broadcasting - 向量化操作,效率提升神器
arr = np.array([[1, 2], [3, 4]])
arr + 1 # [[2, 3], [4, 5]]
11. 切片(slicing) - 分割数组就像切蛋糕
arr = np.arange(10)
arr[2:5] # [2, 3, 4]
12. 条件运算(boolean indexing) - 挑选符合条件的数据
arr[arr > 5] # 返回大于5的所有元素
13. stack()和hstack/vstack() - 合并数组,水平或垂直拼接
np.stack((arr, arr**2)) # 横向堆叠两列
14. concatenate() - 更灵活地拼接多维数组
np.concatenate((arr, arr[:, ::-1])) # 纵向拼接原数组和倒序数组
15. sum(), mean(), std() - 计算数组总和、平均值和标准差
arr = np.array([1, 2, 3, 4, 5])
arr.sum(), arr.mean(), arr.std() # 15, 3.0, 1.5811388300841898
16. where() - 根据条件替换数组元素
np.where(arr > 3, 'greater', 'lower') # ['greater', 'lower', 'greater', 'greater', 'greater']
17. linspace() and logspace() - 等间距和对数空间生成数组
np.linspace(0, 10, 5) # [0. , 2.5, 5. , 7.5, 10. ]
18. apply_along_axis() - 沿轴应用函数,像魔法棒一样改变数组
np.apply_along_axis(np.sqrt, 0, arr) # 沿行求每个元素的平方根
19. nan_to_num() - 处理缺失值,让数组更健康
np.nan_to_num(arr, nan=0) # 将NaN替换为0
20. 内存管理 - 了解内存视图与复制,优化性能
arr_view = arr.view() # 创建视图,共享内存
arr_view.base is arr # True
21. ndarray.ndim - 获取数组的维度
arr.ndim # 输出数组的维数,如arr.shape有(2, 3),ndim为2
22. transpose() - 转置数组,交换行和列
arr = np.array([[1, 2], [3, 4]])
arr.transpose() # [[1, 3], [2, 4]]
23. roll() - 移动数组元素,就像滚动条
np.roll(arr, 1) # 移动一个位置,相当于右移一位
24. broadcasting规则 - 自动扩展较小数组到较大数组
a = np.array([1, 2])
b = np.array(3)
a * b # [3, 6]
25. masking - 使用布尔掩码选择数组元素
arr[arr > 2] = 0 # 将大于2的元素设为0
26. dtype转换 - 在需要时改变元素类型
arr.astype('str') # 将数组元素转化为字符串
27. split() and vsplit() - 水平或垂直分割数组
arr_split = np.array_split(arr, 2) # 按列分成两部分
28. reshape()和resize() - 改变数组形状或大小
arr.resize((4, 2)) # 改变数组大小,但不改变元素
29. vectorize() - 函数向量化,提高性能
@np.vectorize
def square(x): return x**2
square(arr) # [1, 4, 9, 16, 25]
30. ufuncs - 高级数学函数库,快速进行数学运算
np.sin(arr) # 计算数组的正弦值
31. unique() - 提取数组中的唯一元素
np.unique(arr) # 返回数组中的唯一值
32. argmin()和argmax() - 找出最小值和最大值的索引
arr.argmin(), arr.argmax() # (0, 4) (对应最小值和最大值的索引)
33. cumsum()和cumprod() - 求累加和与累乘积
arr.cumsum() # [1, 3, 6, 10, 15]
34. bincount() - 统计离散值出现的次数
np.bincount(arr) # [1, 1, 1, 1, 1]
35. isnan()和isfinite() - 检查元素是否为NaN或有限值
np.isnan(arr).any() # 判断数组是否有NaN
36. loadtxt() 和 savetxt() - 读写文本文件中的数组
np.loadtxt('data.txt') # 从文件读取数组
np.savetxt('output.txt', arr) # 将数组保存到文件
37. memmap() - 内存映射文件,处理大数组时节省内存
mmap_arr = np.memmap('big_data.mmap', dtype='float32')
38. random.shuffle() - 随机打乱数组元素
np.random.shuffle(arr) # 随机排列数组
39. histogram() - 绘制直方图
hist, bins = np.histogram(arr, bins=5) # 对数组分段并计算频率
40. rolling() - 滚动窗口统计,如移动平均
rolling_mean = arr.rolling(window=3).mean() # 滑动窗口计算3点平均值
41. vstack(), hstack(), concatenate() - 合并多维数组
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])
np.hstack((arr1, arr2)) # [[1, 2], [3, 4], [5, 6]]
42. squeeze() - 删除多余的维度
arr = np.array([[[1, 2]]])
arr.squeeze() # [1, 2]
43. array_split() - 按指定分隔符拆分数组
arr_split = np.array_split(arr, 2, axis=0) # 按行拆分为两部分
44. stack水平和垂直 - 合并数组,区分axis=0和axis=1
np.stack([arr1, arr2], axis=0) # 水平堆叠
np.stack([arr1, arr2.T], axis=1) # 垂直堆叠
45. einsum() - Einstein缩写表示的张量运算
np.einsum('ij,jk->ik', arr1, arr2) # 相当于arr1 @ arr2 (矩阵乘法)
46. std(ddof=1) - 分布自由度的选择
arr.std(ddof=1) # 标准差,ddof=1考虑样本标准差
47. datetime64和timedelta64 - 处理日期和时间数据
dt = np.datetime64('2022-01-01')
td = np.timedelta64(1, 'D') # 一天
48. logical_and()和logical_or() - 逻辑与和或操作
np.logical_and(arr > 3, arr < 6) # 返回大于3且小于6的元素布尔值
49. random.choice() - 随机采样元素
np.random.choice(arr, size=3) # 从arr中随机选取3个元素
50. apply() - 应用自定义函数到数组元素
def custom_func(x): return x**2
np.apply(arr, custom_func) # 应用custom_func到每个元素
51. where() - 使用条件返回不同数组
result = np.where(arr > 5, arr, 0) # 如果arr>5,返回arr;否则,返回0
52. array_equal() - 检查两个数组是否相等
np.array_equal(arr1, arr2) # 判断arr1和arr2是否完全相同
53. nanargmin()和nanargmax() - 找出NaN值的最小值和最大值索引
np.nanargmin(arr) # 返回第一个遇到NaN的最小值索引
54. searchsorted() - 查找插入位置保持排序
np.searchsorted(arr, [4, 7]) # 返回将这些值插入数组后保持有序的索引
55. setdiff1d() - 返回两个数组的差异
np.setdiff1d(arr1, arr2) # 返回arr1中不在arr2中的元素
56. percentile() - 计算数组的百分位数
np.percentile(arr, 50) # 计算数组的中位数
57. cumulative product - 累乘积
arr.cumprod() # 返回数组元素的累积乘积
58. pad() - 填充数组边缘
np.pad(arr, pad_width=(2, 2), mode='constant', constant_values=0) # 在边界添加0
59. fromfunction() - 从函数创建数组
np.fromfunction(lambda i, j: i+j, (3, 3)) # 生成3x3数组,元素为i+j
60. copy() - 创建数组副本
arr_copy = arr.copy() # 创建arr的浅复制,修改arr_copy不影响原始arr
61. take() - 根据索引选取数组元素
np.take(arr, indices=[0, 3]) # 选取索引0和3对应的元素
62. argpartition() - 分区并返回分割点的索引
part_idx = np.argpartition(arr, kth=2) # 将arr按第2小的元素分区
63. histogram2d() - 二维直方图
hist, xedges, yedges = np.histogram2d(x, y, bins=10) # 绘制x和y的二维直方图
64. corrcoef() - 计算相关系数矩阵
corr_matrix = np.corrcoef(arr1, arr2) # 计算arr1和arr2的相关系数
65. round() - 四舍五入到指定精度
np.round(arr, decimals=2) # 将arr的元素四舍五入到小数点后两位
66. interp() - 插值函数,用于数值近似
interpolated = np.interp(x_new, x, y) # 在x_new处根据x和y进行线性插值
67. load() 和 save() - 读取和保存NumPy文件
np.save('my_array.npy', arr) # 保存数组到.npz或.npy文件
loaded_arr = np.load('my_array.npy') # 从文件加载
68. fft() 和 ifft() - 快速傅立叶变换
fft_result = np.fft.fft(arr) # 对arr进行离散傅立叶变换
69. rolling_window() - 自定义滚动窗口函数
from scipy.signal import window
arr_rolled = np.lib.stride_tricks.as_strided(arr, shape=(len(arr)-window_size+1, window_size), strides=(arr.strides[0], arr.strides[0]))
70. argwhere() - 查找满足条件的元素及其索引
indices = np.argwhere(arr > 0.5) # 返回arr中大于0.5的所有元素的索引
71. nanmedian() - 计算忽略NaN的中位数
np.nanmedian(arr) # 计算arr的中位数,忽略NaN
72. repeat() - 重复数组元素
np.repeat(arr, repeats=3) # 使arr的每个元素重复3次
73. argwhere() 和 nonzero() - 获取非零元素及其索引
indices = np.argwhere(arr) # 返回所有非零元素的索引
non_zeros = arr.nonzero() # 相同结果
74. std(ddof=1, axis=None) - 标准差,支持沿轴计算
arr_std = np.std(arr, axis=0) # 沿着列计算标准差
75. where(condition, x, y) - 根据条件应用多个数组
new_arr = np.where(arr > 0, arr, -arr) # 如果arr>0,保留arr;否则,取相反数
76. bincount() 和 histogramdd() - 多维直方图
hist, edges = np.histogramdd(sample_data, bins=10) # 计算多维直方图
77. average() - 统计平均值,支持权重和函数
weighted_average = np.average(arr, weights=weights) # 权重平均
78. random.permutation() - 随机排列数组元素
shuffled_arr = np.random.permutation(arr) # 随机打乱arr的顺序
79. array_split() 和 split() - 按指定比例或索引切分数组
chunks = np.array_split(arr, 3) # 按索引或比例切割数组
80. unique_with_counts() - 返回数组元素及其出现次数
unique_values, counts = np.unique(arr, return_counts=True) # 返回唯一值及其出现次数
81. cov() - 计算协方差矩阵
cov_matrix = np.cov(arr1, arr2) # 计算arr1和arr2的协方差矩阵
82. vander() - Vandermonde矩阵生成
vandermonde = np.vander(np.arange(3), increasing=True) # 生成Vandermonde矩阵
83. array_equal_nans() - 检查是否除NaN外完全相等
np.array_equal_nans(arr1, arr2) # 检查arr1和arr2是否除NaN外完全相同
84. nanargmin() 和 nanargmax() - 包含NaN的最小值和最大值索引
nan_min_index = np.nanargmin(arr) # 返回第一个遇到NaN的最小值索引
85. argpartition() 和 partition() - 无返回值版本的分区
arr_partitioned = np.partition(arr, kth=2) # 按第2小的元素分区,返回分区后的数组
86. iscomplex() - 检查数组是否包含复数
is_complex = np.iscomplex(arr) # 返回布尔数组,指示arr中的元素是否为复数
87. atleast_1d() - 确保至少有一个维度
arr_1d = np.atleast_1d(arr) # 如果arr是标量,将其转换为一维数组
88. where() 和 fill_diagonal() - 设置或填充对角线
np.fill_diagonal(arr, 1) # 在对角线上填充1
arr_where = np.where(np.eye(3), 'diagonal', 'off-diagonal') # 根据对角线设置元素
89. stack() 和 concatenate() - 仅沿新轴合并数组
stacked = np.stack([arr1, arr2], axis=1) # 沿新轴1堆叠arr1和arr2
90. random.choices() - 随机选择数组中的元素
selected_elements = np.random.choices(arr, k=3) # 随机选择3个元素
91. argtopk() - 找到前k个最大或最小值的索引
top_k_indices = np.argtopk(arr, k=3) # 返回arr中最大的3个元素的索引
92. pad_inches() 和 pad - 以英寸为单位填充边界
padded_img = img.pad_inches('0.5in') # 边界填充0.5英寸
93. around() - 四舍五入到指定小数位
rounded_arr = np.around(arr, decimals=2) # 将arr四舍五入到小数点后两位
94. isneginf() 和 isnaninf() - 检查负无穷和NaN
is_neg_inf = np.isneginf(arr) # 返回arr中元素是否为负无穷
95. at() - 通过索引获取和设置数组元素
new_value = np.at(arr, indices, value) # 通过索引给arr赋值
96. take_along_axis() - 沿指定轴选取元素
sliced_arr = np.take_along_axis(arr, indices, axis=0) # 沿行选取元素
97. rollaxis() 和 swapaxes() - 转换数组的轴
arr_rotated = np.rollaxis(arr, 0, 2) # 将第一个轴旋转到第二个轴
arr_swapped = np.swapaxes(arr, 0, 1) # 交换第一和第二轴
98. unique_consecutive() - 连续元素的唯一值
unique_consecutives = np.unique_consecutive(arr) # 返回连续且唯一的元素序列
99. clip() - 限制数组元素在指定范围内
clipped_arr = np.clip(arr, a_min=0, a_max=10) # 将arr限制在0到10之间
100. einsum_path() - 计算Einstein求和路径
einsum_path = np.einsum_path('ij->j', arr) # 计算Einstein求和的最优路径
YXN-python
2023-04-16