NumPy(Numerical Python的简称),是科学计算基础的一个库,提供了大量关于科学计算的相关功能,例如,线性变换,数据统计,随机数生成等。其提供的最核心的类型为多维数组类型(ndarray)。本文主要介绍了第三方库NumPy的相关操作。其中对数组的操作如创建多种特殊数组的以及简单操作和自带函数的使用是关键内容。
一 numpy介绍
主要功能和特点:
-
多维数组对象(ndarray):
- NumPy的核心是
ndarray
(n-dimensional array)对象,它是一种快速的、灵活的、具有高性能的多维数组,可以用于存储同类型的数值数据。
- NumPy的核心是
-
数组操作:
- NumPy提供了丰富的功能,支持数组的基本操作,如数学运算、逻辑运算、统计运算等,可以对数组进行元素级的操作。
- 数组可以通过广播(broadcasting)机制进行操作,使得数组在不同形状下也能进行计算。
-
切片和索引:
- NumPy支持灵活的数组切片和索引操作,可以轻松提取子数组、修改数组元素等。
-
线性代数:
- NumPy提供了线性代数相关的函数,如矩阵乘法、特征值计算、奇异值分解等,方便进行高效的数学计算。
-
随机数生成:
- NumPy里面有一个强大的随机模块,可以生成各种分布的随机数,比如均匀分布、正态分布等,非常适合于模拟和数据分析。
-
文件输入输出:
- NumPy支持读取和写入多种格式的数值数据文件,如文本文件、二进制文件、CSV等,方便与其他数据源的交互。
-
与其他库的兼容性:
- NumPy是许多其他科学计算库(如SciPy、Pandas、Matplotlib等)的基础,确保了它能够与这些库良好集成。
二 如何使用
首先需要安装库,当我们安装好python3之后,可以使用以下命令安装numpy库
pip install numpy
接下来代码演示如何创建数组和基本运算:
import numpy as np
# 创建一个一维数组
a = np.array([1, 2, 3, 4])
print("一维数组:", a)
# 创建一个二维数组
b = np.array([[1, 2], [3, 4]])
print("二维数组:\n", b)
# 数组运算
c = a + 5 # 所有元素加5
print("数组加5:", c)
d = b * 2 # 所有元素乘以2
print("二维数组乘2:\n", d)
# 矩阵乘法
e = np.dot(b, b) # 矩阵乘法
print("矩阵乘法:\n", e)
# 计算数组的均值
mean_a = np.mean(a)
print("一维数组的均值:", mean_a)
numpy几个常用的方法
1. 创建数组的方法
-
np.array()
: 创建一个NumPy数组import numpy as np arr = np.array([1, 2, 3, 4])
-
np.zeros()
: 创建一个全零数组zeros_array = np.zeros((3, 4)) # 3行4列的数组
-
np.ones()
: 创建一个全一数组ones_array = np.ones((2, 3)) # 2行3列的数组
-
np.arange()
: 创建一个均匀分布的数组arr = np.arange(0, 10, 2) # 从0到10步长为2
-
np.linspace()
: 创建一个指定范围的均匀间隔数组arr = np.linspace(0, 1, 5) # 在0到1之间生成5个值
2. 数组操作方法
-
ndarray.shape
: 获取数组的形状shape = arr.shape # 返回数组的形状
-
ndarray.reshape()
: 修改数组的形状reshaped_arr = arr.reshape(2, 2) # 将数组重塑为2行2列
-
ndarray.flatten()
: 将多维数组展平为一维数组flat_arr = arr.flatten()
-
ndarray.transpose()
: 转置数组transposed_arr = b.T # 对二维数组b进行转置
3. 统计方法
-
np.mean()
: 计算平均值mean_value = np.mean(arr)
-
np.median()
: 计算中位数median_value = np.median(arr)
-
np.std()
: 计算标准差std_dev = np.std(arr)
-
np.sum()
: 计算数组的和total = np.sum(arr)
4. 数组运算
-
ndarray + 10
: 所有元素加10new_arr = arr + 10
-
np.dot()
: 矩阵乘法result = np.dot(a, b) # a和b进行矩阵乘法
-
np.add()
: 逐元素加法c = np.add(arr1, arr2)
-
np.multiply()
: 逐元素乘法d = np.multiply(arr1, arr2)
5. 逻辑操作
-
np.where()
: 根据条件返回数组元素的索引indices = np.where(arr > 2) # 返回大于2的元素的索引
-
ndarray.any()
: 检查是否至少有一个元素为Truehas_positive = (arr > 0).any()
-
ndarray.all()
: 检查是否所有元素都为Trueall_positive = (arr > 0).all()
6. 文件输入输出
-
np.loadtxt()
: 从文本文件加载数据data = np.loadtxt('data.txt')
-
np.savetxt()
: 将数组保存到文本文件np.savetxt('output.txt', arr)
三 numpy结合matploatlib生成一个工资折线图图形,代码如下:
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
# 去年的工资
last_year = np.random.randint(4000,6000,12)
print(last_year)
# 今年的工资
this_year = np.random.randint(5000,7000,12)
print(this_year)
plt.plot(range(1,13),last_year,marker='o',label='2023')
plt.plot(range(1,13),this_year,marker='x',label='2024')
# 2022的工资
year1=[4500,4600,4702,4789,4800,4750,4600,4390,4200,5000,5500,5900]
plt.plot(range(1,13),year1,marker='>',label='2022')
plt.legend(loc=1,title='我的工资',ncol=1)
plt.xticks([1,2,3,4,5,6,7,8,9,10,11,12])
plt.xlabel('月份')
plt.yticks([4000,4500,5000,5500,6000,6500,7000])
plt.ylabel('工资')
# 表格线
plt.grid(True,color='g',linestyle='-.')
plt.show()
运行的结果如下图: