您现在的位置是:网站首页 > 博客日记 >

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