NumPy 魔法:50 个让你爱上数据处理的绝妙技巧!

237 阅读9分钟

 一、引言

NumPy 是 Python 中一个强大的数值计算库,广泛应用于数据分析、机器学习和科学计算等领域。本文将介绍 50 个常用的 NumPy 方法,帮助你更好地掌握这个库的使用。让我们一起开启 NumPy 的魔法之旅吧!

制作万分的不易,如果你觉得这些技巧对你有帮助,不妨点赞和收藏哦!

二、五十个NumPy中最常用方法

1. np.array()

创建一个 NumPy 数组。

import numpy as np arr = np.array([1, 2, 3, 4])
print(arr) 
# 输出: [1 2 3 4]

解释np.array() 用于将列表或其他序列转换为 NumPy 数组。


2. np.zeros()

创建一个指定形状的数组,元素均为零。

zeros_array = np.zeros((2, 3)) 
print(zeros_array) 
# 输出:
 # [[0. 0. 0.]
 # [0. 0. 0.]]

解释np.zeros(shape) 创建一个形状为 shape 的数组,所有元素初始化为 0。


3. np.ones()

创建一个指定形状的数组,元素均为一。

ones_array = np.ones((2, 3)) 
print(ones_array) 
# 输出: 
# [[1. 1. 1.] 
# [1. 1. 1.]]

解释np.ones(shape) 创建一个形状为 shape 的数组,所有元素初始化为 1。


4. np.empty()

创建一个未初始化的数组,元素的值是随机的。

empty_array = np.empty((2, 3)) 
print(empty_array)

解释np.empty(shape) 创建一个形状为 shape 的数组,元素未初始化,值是随机的。


5. np.arange()

创建一个一维数组,包含指定范围内的均匀间隔的值。

range_array = np.arange(0, 10, 2) 
print(range_array) 
# 输出: 
[0 2 4 6 8]

解释np.arange(start, stop, step) 返回一个数组,包含从 start 到 stop 的值,步长为 step


6. np.linspace()

在指定的区间内生成均匀间隔的数字。

linspace_array = np.linspace(0, 1, 5) 
print(linspace_array) 
# 输出: 
[0. 0.25 0.5 0.75 1. ]

解释np.linspace(start, stop, num) 返回 num 个均匀分布在 [start, stop] 之间的值。


7. np.eye()

创建一个单位矩阵。

identity_matrix = np.eye(3) 
print(identity_matrix) 
# 输出: 
# [[1. 0. 0.]
# [0. 1. 0.] 
# [0. 0. 1.]]

解释np.eye(N) 返回一个 N x N 的单位矩阵。


8. np.reshape()

改变数组的形状。

original_array = np.array([1, 2, 3, 4, 5, 6]) 
reshaped_array = original_array.reshape((2, 3)) 
print(reshaped_array) 
# 输出: 
# [[1 2 3] 
# [4 5 6]]

解释np.reshape(array, new_shape) 将数组 array 改变为 new_shape 形状。


9. np.flatten()

将多维数组展平为一维数组。

array = np.array([[1, 2], [3, 4]]) 
flattened_array = array.flatten() 
print(flattened_array) 
# 输出: [1 2 3 4]

解释array.flatten() 返回一个一维数组,包含原数组的所有元素。


10. np.transpose()

对数组进行转置。

array = np.array([[1, 2], [3, 4]]) 
transposed_array = np.transpose(array) 
print(transposed_array) 
# 输出: 
# [[1 3] 
# [2 4]]

解释np.transpose(array) 返回数组的转置。


11. np.sum()

计算数组元素的总和。

array = np.array([1, 2, 3, 4]) 
total = np.sum(array) 
print(total) 
# 输出: 10

解释np.sum(array) 返回数组所有元素的和。


12. np.mean()

计算数组元素的平均值。

array = np.array([1, 2, 3, 4]) 
average = np.mean(array) 
print(average) 
# 输出: 2.5

解释np.mean(array) 返回数组所有元素的平均值。


13. np.median()

计算数组的中位数。

array = np.array([1, 2, 3, 4]) 
median = np.median(array) 
print(median) 
# 输出: 2.5

解释np.median(array) 返回数组的中位数。


14. np.std()

计算数组的标准差。

array = np.array([1, 2, 3, 4]) 
std_dev = np.std(array) 
print(std_dev) 
# 输出: 1.118033988749895

解释np.std(array) 返回数组元素的标准差。


15. np.var()

计算数组的方差。

array = np.array([1, 2, 3, 4]) 
variance = np.var(array) 
print(variance) 
# 输出: 1.25

解释np.var(array) 返回数组元素的方差。


16. np.max()

计算数组的最大值。

array = np.array([1, 2, 3, 4]) 
maximum = np.max(array) 
print(maximum) 
# 输出: 4

解释np.max(array) 返回数组中的最大值。


17. np.min()

计算数组的最小值。

array = np.array([1, 2, 3, 4]) 
minimum = np.min(array) 
print(minimum) 
# 输出: 1

解释np.min(array) 返回数组中的最小值。


18. np.argmin()

返回数组中最小值的索引。

array = np.array([1, 2, 3, 4]) 
index_of_min = np.argmin(array) 
print(index_of_min) 
# 输出: 0

解释np.argmin(array) 返回数组中最小值的索引。


19. np.argmax()

返回数组中最大值的索引。

array = np.array([1, 2, 3, 4]) 
index_of_max = np.argmax(array) 
print(index_of_max) 
# 输出: 3

解释np.argmax(array) 返回数组中最大值的索引。


20. np.unique()

找出数组中的唯一值。

array = np.array([1, 2, 2, 3, 4]) 
unique_values = np.unique(array) 
print(unique_values) 
# 输出: [1 2 3 4]

解释np.unique(array) 返回数组中的唯一元素。


21. np.concatenate()

连接多个数组。

array1 = np.array([1, 2, 3]) 
array2 = np.array([4, 5, 6]) 
concatenated_array = np.concatenate((array1, array2)) 
print(concatenated_array) 
# 输出: [1 2 3 4 5 6]

解释np.concatenate((array1, array2)) 将多个数组沿指定轴连接。


22. np.vstack()

垂直堆叠数组。

array1 = np.array([1, 2, 3]) 
array2 = np.array([4, 5, 6]) 
vstacked_array = np.vstack((array1, array2)) 
print(vstacked_array) 
# 输出:
 # [[1 2 3]
 # [4 5 6]]

解释np.vstack((array1, array2)) 将数组沿垂直方向堆叠。


23. np.hstack()

水平堆叠数组。

array1 = np.array([[1], [2], [3]]) 
array2 = np.array([[4], [5], [6]]) 
hstacked_array = np.hstack((array1, array2)) 
print(hstacked_array) 
# 输出: 
# [[1 4] 
# [2 5] 
# [3 6]]

解释np.hstack((array1, array2)) 将数组沿水平方向堆叠。


24. np.split()

将数组分割成多个子数组。

array = np.array([1, 2, 3, 4, 5, 6]) 
split_arrays = np.split(array, 3) 
print(split_arrays) 
# 输出: [array([1, 2]), array([3, 4]), array([5, 6])]

解释np.split(array, indices) 将数组分割为多个子数组。


25. np.random.rand()

生成均匀分布的随机数。

random_array = np.random.rand(2, 3) 
print(random_array)

解释np.random.rand(d0, d1, ..., dn) 返回一个指定形状的数组,元素为均匀分布的随机数。


26. np.random.randn()

生成标准正态分布的随机数。

random_array = np.random.randn(2, 3) 
print(random_array)

解释np.random.randn(d0, d1, ..., dn) 返回一个指定形状的数组,元素为标准正态分布的随机数。


27. np.random.randint()

生成随机整数。

random_integers = np.random.randint(0, 10, size=(2, 3)) 
print(random_integers)

解释np.random.randint(low, high, size) 返回指定形状的数组,元素为在 [low, high) 范围内的随机整数。


28. np.where()

根据条件返回数组元素的索引。

array = np.array([1, 2, 3, 4, 5]) 
indices = np.where(array > 2) 
print(indices) 
# 输出: (array([2, 3, 4]),)

解释np.where(condition) 返回满足条件的元素的索引。


29. np.isin()

检查数组元素是否在另一个数组中。

array = np.array([1, 2, 3, 4]) 
check_array = np.array([2, 4]) 
result = np.isin(array, check_array) print(result) 
# 输出: [False True False True]

解释np.isin(element, test_elements) 检查 element 中的每个元素是否在 test_elements 中。


30. np.clip()

限制数组元素的值在指定范围内。

array = np.array([1, 2, 3, 4, 5]) 
clipped_array = np.clip(array, 2, 4) 
print(clipped_array) 
# 输出: [2 2 3 4 4]

解释np.clip(array, min, max) 将数组元素限制在 [min, max] 范围内。


31. np.sort()

对数组进行排序。

array = np.array([3, 1, 2, 4]) 
sorted_array = np.sort(array) 
print(sorted_array) 
# 输出: [1 2 3 4]

解释np.sort(array) 返回排序后的数组。


32. np.argsort()

返回数组排序后元素的索引。

array = np.array([3, 1, 2, 4]) 
sorted_indices = np.argsort(array) 
print(sorted_indices) 
# 输出: [1 2 0 3]

解释np.argsort(array) 返回排序后元素的索引。


33. np.cumsum()

计算数组元素的累积和。

array = np.array([1, 2, 3, 4]) 
cumulative_sum = np.cumsum(array) 
print(cumulative_sum) 
# 输出: [ 1 3 6 10]

解释np.cumsum(array) 返回数组元素的累积和。


34. np.cumprod()

计算数组元素的累积积。

array = np.array([1, 2, 3, 4]) 
cumulative_product = np.cumprod(array) 
print(cumulative_product) 
# 输出: [ 1 2 6 24]

解释np.cumprod(array) 返回数组元素的累积积。


35. np.dot()

计算两个数组的点积。

array1 = np.array([1, 2, 3]) 
array2 = np.array([4, 5, 6]) 
dot_product = np.dot(array1, array2) 
print(dot_product) 
# 输出: 32

解释np.dot(a, b) 计算数组 a 和 b 的点积。


36. np.matmul()

矩阵乘法。

array1 = np.array([[1, 2], [3, 4]]) 
array2 = np.array([[5, 6], [7, 8]]) 
matrix_product = np.matmul(array1, array2) 
print(matrix_product) 
# 输出: 
# [[19 22] 
# [43 50]]

解释np.matmul(a, b) 执行矩阵乘法。


37. np.outer()

计算两个向量的外积。

array1 = np.array([1, 2]) 
array2 = np.array([3, 4]) 
outer_product = np.outer(array1, array2) 
print(outer_product) 
# 输出: 
# [[3 4] 
# [6 8]]

解释np.outer(a, b) 返回向量 a 和 b 的外积。


38. np.inner()

计算两个向量的内积。

array1 = np.array([1, 2]) 
array2 = np.array([3, 4]) 
inner_product = np.inner(array1, array2) 
print(inner_product) 
# 输出: 11

解释np.inner(a, b) 返回向量 a 和 b 的内积。


39. np.cross()

计算两个向量的叉积。

array1 = np.array([1, 2, 3]) 
array2 = np.array([4, 5, 6]) 
cross_product = np.cross(array1, array2) 
print(cross_product) 
# 输出: [-3 6 -3]

解释np.cross(a, b) 返回向量 a 和 b 的叉积。


40. np.linalg.inv()

计算矩阵的逆。

matrix = np.array([[1, 2], [3, 4]]) 
inverse_matrix = np.linalg.inv(matrix) 
print(inverse_matrix) 
# 输出: 
# [[-2. 1. ] 
# [ 1.5 -0.5]]

解释np.linalg.inv(matrix) 返回矩阵的逆。


41. np.linalg.det()

计算矩阵的行列式。

matrix = np.array([[1, 2], [3, 4]]) 
determinant = np.linalg.det(matrix) 
print(determinant) 
# 输出: -2.0

解释np.linalg.det(matrix) 返回矩阵的行列式。


42. np.linalg.eig()

计算矩阵的特征值和特征向量。

matrix = np.array([[1, 2], [3, 4]]) 
eigenvalues, eigenvectors = np.linalg.eig(matrix)
print(eigenvalues) 
# 输出: [-0.37228132 5.37228132]

解释np.linalg.eig(matrix) 返回矩阵的特征值和特征向量。


43. np.save()

保存数组到文件。

array = np.array([1, 2, 3, 4]) 
np.save('my_array.npy', array)

解释np.save(file, array) 将数组保存到指定文件。


44. np.load()

从文件加载数组。

loaded_array = np.load('my_array.npy') 
print(loaded_array) 
# 输出: [1 2 3 4]

解释np.load(file) 从指定文件加载数组。


45. np.random.seed()

设置随机数生成的种子。

np.random.seed(42) 
random_numbers = np.random.rand(3) 
print(random_numbers) 
# 输出: 
#[0.37454012 0.95071431 0.73199394]

解释np.random.seed(seed) 设置随机数生成的种子,以确保结果可重现。


46. np.meshgrid()

生成网格坐标矩阵。

x = np.array([1, 2, 3]) 
y = np.array([4, 5]) 
X, Y = np.meshgrid(x, y) 
print(X) 
# 输出: 
# [[1 2 3] 
# [1 2 3]] 
print(Y) 
# 输出: 
# [[4 4 4] 
# [5 5 5]]

解释np.meshgrid(x, y) 根据输入的 x 和 y 生成网格坐标矩阵。


47. np.pad()

对数组进行填充。

array = np.array([[1, 2], [3, 4]]) 
padded_array = np.pad(array, pad_width=1, mode='constant', constant_values=0) 

print(padded_array) 
# 输出: 
# [[0 0 0 0] 
# [0 1 2 0] 
# [0 3 4 0] 
# [0 0 0 0]]

解释np.pad(array, pad_width, mode) 在数组周围添加填充。


48. np.diff()

计算数组的离散差。

array = np.array([1, 2, 4, 7, 0]) 
difference = np.diff(array) 
print(difference) 
# 输出: 
[ 1 2 3 -7]

解释np.diff(array) 计算相邻元素之间的差值。


49. np.nonzero()

返回数组中非零元素的索引。

array = np.array([1, 0, 2, 0, 3]) 
nonzero_indices = np.nonzero(array) 
print(nonzero_indices) 
# 输出: 
(array([0, 2, 4]),)

解释np.nonzero(array) 返回数组中非零元素的索引。


50. np.broadcast_to()

将数组广播到指定形状。

array = np.array([1, 2, 3]) 
broadcasted_array = np.broadcast_to(array, (3, 3)) 
print(broadcasted_array) 
# 输出: 
# [[1 2 3] 
# [1 2 3] 
# [1 2 3]]

解释np.broadcast_to(array, shape) 将数组广播到指定形状。


三、结语

本文给大家讲解了50个NumPy的常用方法,希望可以帮助到大家

下一篇应该会给大家介绍Pandas或者教大家按照配置Jupyter?

大家拜拜!