超越NumPy和Pandas:三个鲜为人知的Python库( 三 )

因此 , 正如上述所看到的 , 这个过程非常简单和容易自解释:

  1. 使用symbols()方法定义要求导的函数的符号 。
  2. 定义函数 。
  3. 使用diff()计算导数 , 并指定函数和要计算导数的符号(这是一个绝对导数 , 但在具有x和y变量的函数的情况下 , 甚至也可以进行计算偏导数) 。
如果进行测试 , 就会发现结果在2或3秒钟内就会出现 。因此 , 它的速度也相当快 。
功能三:计算积分当然 , 如果SymPy可以计算导数 , 它也可以计算积分 。接下来尝试做一下:
from sympy import symbols, integrate, sin# 定义符号x = symbols('x')# 执行符号积分integral = integrate(sin(x), x)# 打印积分print(integral)>>>-cos(x)所以 , 本文在这里使用integrate()方法 , 指定要积分的函数和积分变量 。
3.XarrayXarray简介Xarray是一个扩展了NumPy特性和功能的Python库 , 使用户能够使用带有标签的数组和数据集进行工作 。
事实上 , 正如他们在官网上所说的那样:
【Xarray】:https://docs.xarray.dev/en/stable/
Xarray使得在Python中处理带有标签的多维数组变得简单、高效和有趣!
还有:
【链接】:https://docs.xarray.dev/en/stable/getting-started-guide/why-xarray.html
Xarray在类似于NumPy的原始多维数组之上引入了维度、坐标和属性形式的标签 , 这使得开发者的体验更加直观、简洁 , 减少了错误的发生 。
换句话说 , 它通过向数组维度添加标签或坐标来扩展NumPy数组的功能 。这些标签提供了元数据 , 可以对多维数据进行更高级的分析和操作 。
例如 , 在NumPy中 , 使用基于整数的索引访问数组 。
而在Xarray中 , 每个维度都可以关联一个标签 , 这样就可以根据有意义的名称更容易地理解和操作数据 。
例如 , 在Xarray中 , 用户可以使用arr.sel(x=0, y=1, z=2)来访问数据 , 其中x、y和z是维度的标签 , 而不是使用arr[0, 1, 2]来访问数据 。
这使得代码更加易读!
接下来查看一些Xarray的功能 。
一些Xarray的功能像往常一样 , 首先要安装它:
$ pip install xarray功能一:使用标注坐标假设用户想创建与温度相关的一些数据 , 并且想将它们标记为纬度和经度等坐标 。可以这样做:
import xarray as xrimport numpy as np# 创建温度数据temperature = np.random.rand(100, 100) * 20 + 10# 创建经纬度坐标数组latitudes = np.linspace(-90, 90, 100)longitudes = np.linspace(-180, 180, 100)# 创建带有标注坐标的Xarray数据数组da = xr.DataArray(temperature,dims=['latitude', 'longitude'],coords={'latitude': latitudes, 'longitude': longitudes})# 使用标注坐标访问数据subset = da.sel(latitude=slice(-45, 45), lnotallow=slice(-90, 0))如果打印出来 , 就会得到
# 打印数据print(subset)>>>array([[13.45064786, 29.15218061, 14.77363206, ..., 12.00262833,16.42712411, 15.61353963],[23.47498117, 20.25554247, 14.44056286, ..., 19.04096482,15.60398491, 24.69535367],[25.48971105, 20.64944534, 21.2263141 , ..., 25.80933737,16.72629302, 29.48307134],...,[10.19615833, 17.106716, 10.79594252, ..., 29.6897709 ,20.68549602, 29.4015482 ],[26.54253304, 14.21939699, 11.085207, ..., 15.56702191,19.64285595, 18.03809074],[26.50676351, 15.21217526, 23.63645069, ..., 17.22512125,13.96942377, 13.93766583]])Coordinates:* latitude(latitude) float64 -44.55 -42.73 -40.91 ... 40.91 42.73 44.55* longitude(longitude) float64 -89.09 -85.45 -81.82 ... -9.091 -5.455 -1.818所以 , 接下来逐步了解这个过程:
  1. 将温度值创建为一个NumPy数组 。
  2. 将纬度和经度值定义为NumPy数组 。
  3. 使用DataArray()方法将所有数据存储在一个Xarray数组中 。
  4. 使用sel()方法选择了一个经纬度子集 , 该方法为子集选择了我们想要的值 。
这样得到的结果也很容易阅读 , 因此标签在很多情况下非常有帮助 。
功能二:处理缺失数据假设用户正在收集与一年中与温度相关的数据 。并且想知道数组中是否有空值 。如下是用户可以这样做的方法:
import xarray as xrimport numpy as npimport pandas as pd# 创建有缺失值的温度数据temperature = np.random.rand(365, 50, 50) * 20 + 10temperature[0:10, :, :] = np.nan# Set the first 10 days as missing values# 创建时间、纬度和经度坐标数组times = pd.date_range('2023-01-01', periods=365, freq='D')latitudes = np.linspace(-90, 90, 50)longitudes = np.linspace(-180, 180, 50)# 创建带有缺失值的Xarray数据数组da = xr.DataArray(temperature,dims=['time', 'latitude', 'longitude'],coords={'time': times, 'latitude': latitudes, 'longitude': longitudes})# 沿时间维度计算缺失值的数量missing_count = da.isnull().sum(dim='time')# 打印缺失值print(missing_count)>>>array([[10, 10, 10, ..., 10, 10, 10],[10, 10, 10, ..., 10, 10, 10],[10, 10, 10, ..., 10, 10, 10],...,[10, 10, 10, ..., 10, 10, 10],[10, 10, 10, ..., 10, 10, 10],[10, 10, 10, ..., 10, 10, 10]])Coordinates:* latitude(latitude) float64 -90.0 -86.33 -82.65 ... 82.65 86.33 90.0* longitude(longitude) float64 -180.0 -172.7 -165.3 ... 165.3 172.7 180.0


推荐阅读