【数据处理】xarray 数据处理教程:从入门到精通

news2025/5/18 23:35:41

目录

  • xarray 数据处理教程:从入门到精通
    • 一、简介
      • **核心优势**
    • 二、安装与导入
      • 1. 安装
      • 2. 导入库
    • 三、数据结构
      • (一)DataArray
      • (二) Dataset
      • (三)关键说明
    • 四、数据操作
      • (一)索引与切片
        • 1. 基于标签选择(`.sel()`)
        • 2. 基于位置选择(`.isel()`)
        • **3. `.sel()` 和 `.isel()` 联合使用**
        • **4. 多维选择与切片**
        • 5. 关键说明
      • (二) 数据计算
        • 1. 聚合运算
          • (1) 计算单个维度的平均值
          • (2) 计算多个维度的平均值
          • (3) 计算单个维度的标准差
          • (4) 计算多个维度的标准差
          • (5) 忽略缺失值计算统计量
          • (6) 关键说明
        • 2. 算术运算
        • **3. 数据重塑**
          • (1) `.stack()`:将多个维度堆叠成一个新维度
          • (2) `.transpose()`:调整维度顺序
          • (3) `.stack()` + `.transpose()` 联合使用
          • (4) 关键说明
        • 4. 数据聚合
        • 5. 合并两个数据集
        • 6. 应用自定义函数
    • **五、数据可视化**
      • (一)二维分布图
      • (二)时间序列图
    • 六、高级功能
      • (一) 缺失值处理
        • 1. 填充缺失值
        • 2. 插值
      • (二) 时间重采样
      • (三)地理信息处理
        • 1. 设置坐标系
        • 2. 绘制地理投影图
    • 七、数据输入与输出
      • (一)读取 NetCDF 文件
      • (二)保存数据
    • 八、性能优化
      • (一)分块处理(Dask)
      • (二) 内存优化
    • 九、总结
      • (一)核心流程
      • (二)关键优势
      • (三)注意事项

xarray 数据处理教程:从入门到精通

在这里插入图片描述

一、简介

xarray 是 Python 中用于处理多维数组数据的库,特别适用于带有标签(坐标)的科学数据(如气象、海洋、遥感等)。它基于 NumPy 和 Pandas,支持高效的数据操作、分析和可视化。

核心优势

  • 标签化操作:通过维度名和坐标直接访问数据,无需记忆索引位置。
  • 多维支持:天然支持多维数组(如时间、纬度、经度)。
  • 集成工具:内置 NetCDF、HDF5 等格式读写,支持 Dask 处理大文件。
  • 可视化:与 Matplotlib 深度集成,简化数据绘图流程。

二、安装与导入

1. 安装

pip install xarray netCDF4 dask rioxarray

或使用 Conda:

conda install -c conda-forge xarray netCDF4 dask rioxarray

2. 导入库

import xarray as xr
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

三、数据结构

(一)DataArray

  • 定义:带坐标的 N 维数组,类似带标签的 NumPy 数组。
  • 示例代码
import xarray as xr
import numpy as np

data = np.random.rand(12, 5, 100, 200)
coords = {
    'time': np.arange(12),
    'sample': np.arange(5),
    'lat': np.linspace(-90, 90, 100),
    'lon': np.linspace(-180, 180, 200)
}
da = xr.DataArray(data, dims=['time', 'sample', 'lat', 'lon'], coords=coords)
  • 输出结果
<xarray.DataArray (time: 12, sample: 5, lat: 100, lon: 200)>
array([[[[...]],  # 12个时间步 × 5个样本 × 100纬度 × 200经度的随机值
        ...,
        [[...]]],
       ...,
       [[...]]])
Coordinates:
  * time      (time) int64 0 1 2 ... 11
  * sample    (sample) int64 0 1 2 3 4
  * lat       (lat) float64 -90.0 -89.1 -88.2 ... 88.2 89.1 90.0
  * lon       (lon) float64 -180.0 -179.1 -178.2 ... 178.2 179.1 180.0
  • 表1:数据结构DataArray
操作/方法功能输入参数输出参数
xarray.DataArray创建带有维度和坐标的多维数组(如海温数据)data: 数组数据;dims: 维度名列表;coords: 坐标字典生成的 xarray.DataArray 对象

(二) Dataset

  • 定义:类似字典的容器,包含多个 DataArray(变量),共享坐标。

  • 表:xarray.Dataset 操作总结

操作/方法功能输入参数输出参数
xr.Dataset创建多变量数据集变量字典、坐标字典xarray.Dataset 对象
.sel() / .isel()按标签或索引选择数据维度名和值子数据集或子数组
.mean() / .std()计算维度统计量需求平均的维度名统计后的数据集或数据数组
.to_netcdf()保存为 NetCDF 文件文件路径和写入模式无返回值(保存文件)
xr.open_dataset()读取 NetCDF 文件文件路径和读取引擎xarray.Dataset 对象
.merge()合并两个数据集另一个 Dataset 对象合并后的 xarray.Dataset
.apply()应用自定义函数自定义函数和输入维度应用后的数据集
.chunk()设置数据分块分块大小字典分块后的 xarray.Dataset
  • 创建示例
import xarray as xr
import numpy as np
import pandas as pd

ds = xr.Dataset(
    {
        "temperature": (["time", "lat", "lon"], np.random.rand(3, 10, 20)),
        "humidity": (["time", "lat", "lon"], np.random.rand(3, 10, 20)),
    },
    coords={
        "time": pd.date_range("2025-01-01", periods=3),
        "lat": np.linspace(-90, 90, 10),
        "lon": np.linspace(-180, 180, 20),
    }
)
  • 输出结果
<xarray.Dataset>
Dimensions:     (time: 3, lat: 10, lon: 20)
Coordinates:
  * time        (time) datetime64[ns] 2025-01-01 2025-01-02 ...
  * lat         (lat) float64 -90.0 -81.0 ... 81.0 90.0
  * lon         (lon) float64 -180.0 -171.0 ... 171.0 180.0
Data variables:
    temperature (time, lat, lon) float64 0.1234 0.5678 ...
    humidity    (time, lat, lon) float64 0.9876 0.4321 ...

(三)关键说明

  1. Dataset vs DataArray
    • xarray.Dataset 适合处理多变量数据(如温度、湿度、降水)。
    • xarray.DataArray 适合单一变量的多维数组操作。
  2. 工作流示例
    # 读取数据并选择子集
    ds = xr.open_dataset("data.nc")
    subset = ds.sel(lat=slice(-90, -60), lon=slice(-180, -120))
    
    # 计算统计量并保存
    mean_ds = subset.mean(dim="time")
    mean_ds.to_netcdf("mean_data.nc")
    

四、数据操作

(一)索引与切片

表:索引与切片

操作/方法功能输入参数输出参数
.isel() / .sel()快速提取特定维度数据isel: 按索引提取;sel: 按坐标标签提取提取后的子数组(xarray.DataArray
1. 基于标签选择(.sel()

场景:从数据集中提取特定时间步和纬度范围的数据。

subset = ds.sel(time="2025-01-01", lat=-90)

输出结果

<xarray.Dataset>
Dimensions:     (lat: 1, lon: 20)
Coordinates:
    time        datetime64[ns] 2025-01-01
    lat         float64 -90.0
    lon         (lon) float64 -180.0 -171.0 ... 171.0 180.0
Data variables:
    temperature (lon) float64 0.1234 0.5678 ...
    humidity    (lon) float64 0.9876 0.4321 ...
2. 基于位置选择(.isel()

场景:从数据集中提取第一个时间步和前三个纬度的数据。

# 按索引位置选择数据
subset_isel = ds.isel(time=0, lat=slice(0, 3))

输出结果

<xarray.Dataset>
Dimensions:     (time: 1, lat: 3, lon: 20)
Coordinates:
    time        datetime64[ns] 2025-01-01
  * lat         (lat) float64 -90.0 -76.36 -62.73
  * lon         (lon) float64 -180.0 -171.0 ... 171.0 180.0
Data variables:
    temperature (time, lat, lon) float64 0.1234 0.5678 ...
3. .sel().isel() 联合使用

场景:结合标签和索引选择数据(例如,选择特定时间步和固定经度索引)。

# 按时间标签和经度索引选择数据
subset_mixed = ds.sel(time="2025-01-01").isel(lon=0)

输出结果

<xarray.Dataset>
Dimensions:     (time: 1, lat: 10, lon: 1)
Coordinates:
    time        datetime64[ns] 2025-01-01
  * lat         (lat) float64 -90.0 -81.0 ... 81.0 90.0
    lon         float64 -180.0
Data variables:
    temperature (time, lat, lon) float64 0.1234 0.5678 ...

4. 多维选择与切片

场景:同时选择多个维度(时间、纬度、经度)并使用切片操作。

# 按时间标签、纬度范围和经度切片选择数据
subset_slice = ds.sel(
    time="2025-01-01",
    lat=slice(-90, -60),
    lon=slice(-180, -120)
)

输出结果

<xarray.Dataset>
Dimensions:     (time: 1, lat: 3, lon: 7)
Coordinates:
    time        datetime64[ns] 2025-01-01
  * lat         (lat) float64 -90.0 -76.36 -62.73
  * lon         (lon) float64 -180.0 -163.6 ... -126.3 -120.0
Data variables:
    temperature (time, lat, lon) float64 0.1234 0.5678 ...
5. 关键说明
  1. .sel() vs .isel()

    • .sel():使用坐标标签(如 time="2025-01-01"lat=-90)进行选择,适合已知具体坐标的场景。
    • .isel():使用索引位置(如 time=0lat=slice(0, 3))进行选择,适合已知数组索引的场景。
  2. 切片操作

    • 可以通过 slice(start, end) 实现对维度的范围选择(例如 lat=slice(-90, -60))。
    • 切片是左闭右开的,即包含 start,不包含 end
  3. 多维联合选择

    • 可以联合使用 .sel().isel(),例如先按标签选择时间,再按索引选择经度。
    • 也可以通过链式调用实现多步选择(如 ds.sel(...).isel(...))。

(二) 数据计算

1. 聚合运算
(1) 计算单个维度的平均值

场景:从数据集中计算时间维度(time)的平均值。

import xarray as xr
import numpy as np
import pandas as pd

# 创建示例数据集
ds = xr.Dataset(
    {
        "temperature": (["time", "lat", "lon"], np.random.rand(3, 10, 20)),
        "humidity": (["time", "lat", "lon"], np.random.rand(3, 10, 20)),
    },
    coords={
        "time": pd.date_range("2025-01-01", periods=3),
        "lat": np.linspace(-90, 90, 10),
        "lon": np.linspace(-180, 180, 20),
    }
)

# 计算时间维度的平均值
mean_time = ds.mean(dim="time")

输出结果

<xarray.Dataset>
Dimensions:     (lat: 10, lon: 20)
Coordinates:
  * lat         (lat) float64 -90.0 -81.0 -72.0 ... 72.0 81.0 90.0
  * lon         (lon) float64 -180.0 -171.0 -162.0 ... 162.0 171.0 180.0
Data variables:
    temperature (lat, lon) float64 0.4567 0.8901 ...
    humidity    (lat, lon) float64 0.7654 0.3210 ...

(2) 计算多个维度的平均值

场景:从数据集中计算时间和纬度维度的平均值。

# 计算时间和纬度维度的平均值
mean_time_lat = ds.mean(dim=["time", "lat"])

输出结果

<xarray.Dataset>
Dimensions:     (lon: 20)
Coordinates:
  * lon         (lon) float64 -180.0 -171.0 -162.0 ... 162.0 171.0 180.0
Data variables:
    temperature (lon) float64 0.6789 ...
    humidity    (lon) float64 0.5432 ...
(3) 计算单个维度的标准差

场景:从数据集中计算纬度维度(lat)的标准差。

# 计算纬度维度的标准差
std_lat = ds.std(dim="lat")

输出结果

<xarray.Dataset>
Dimensions:     (time: 3, lon: 20)
Coordinates:
  * time        (time) datetime64[ns] 2025-01-01 ... 2025-01-03
  * lon         (lon) float64 -180.0 -171.0 -162.0 ... 162.0 171.0 180.0
Data variables:
    temperature (time, lon) float64 0.2345 0.6789 ...
    humidity    (time, lon) float64 0.3456 0.7890 ...
(4) 计算多个维度的标准差

场景:从数据集中计算时间和经度维度的标准差。

# 计算时间和经度维度的标准差
std_time_lon = ds.std(dim=["time", "lon"])

输出结果

<xarray.Dataset>
Dimensions:     (lat: 10)
Coordinates:
  * lat         (lat) float64 -90.0 -81.0 -72.0 ... 72.0 81.0 90.0
Data variables:
    temperature (lat) float64 0.1234 ...
    humidity    (lat) float64 0.4567 ...
(5) 忽略缺失值计算统计量

场景:数据集中包含缺失值(NaN),需要在计算时跳过缺失值。

# 创建包含缺失值的数据集
ds_nan = xr.Dataset(
    {
        "temperature": (["time", "lat", "lon"], np.random.rand(3, 10, 20)),
    },
    coords={
        "time": pd.date_range("2025-01-01", periods=3),
        "lat": np.linspace(-90, 90, 10),
        "lon": np.linspace(-180, 180, 20),
    }
)

# 随机插入缺失值
ds_nan.temperature.values[0, 0, 0] = np.nan

# 计算时间维度的平均值(跳过缺失值)
mean_time_skipna = ds_nan.mean(dim="time", skipna=True)

输出结果

<xarray.Dataset>
Dimensions:     (lat: 10, lon: 20)
Coordinates:
  * lat         (lat) float64 -90.0 -81.0 -72.0 ... 72.0 81.0 90.0
  * lon         (lon) float64 -180.0 -171.0 -162.0 ... 162.0 171.0 180.0
Data variables:
    temperature (lat, lon) float64 0.4567 0.8901 ...

(6) 关键说明
  1. .mean().std() 的区别

    • .mean():计算指定维度的平均值
    • .std():计算指定维度的标准差,默认为样本标准差(ddof=1)。
  2. 维度选择

    • 可以指定单个维度(如 dim="time")或多个维度(如 dim=["time", "lat"])。
    • 维度减少后,输出数据集的维度会相应调整(如从 (time, lat, lon) 变为 (lat, lon))。
  3. 缺失值处理

    • 通过 skipna=True 可以跳过缺失值(NaN)进行计算,避免因缺失值导致整个统计结果为 NaN
2. 算术运算
# 温度乘以 2,降水加 10
new_ds = ds * 2 + 10
3. 数据重塑

总结表格

操作/方法功能输入参数输出参数
.stack()将多个维度堆叠成一个新维度new_dim_name: 新维度名;dim: 原始维度列表维度被堆叠后的 xarray.Dataset
.transpose()调整维度顺序(不改变维度数量)*dims: 新维度顺序维度顺序调整后的 xarray.Dataset

(1) .stack():将多个维度堆叠成一个新维度

场景:将 latlon 维度堆叠成一个名为 space 的新维度。
示例代码

import xarray as xr
import numpy as np
import pandas as pd

# 创建示例数据集
ds = xr.Dataset(
    {
        "temperature": (["time", "lat", "lon"], np.random.rand(3, 10, 20)),
    },
    coords={
        "time": pd.date_range("2025-01-01", periods=3),
        "lat": np.linspace(-90, 90, 10),
        "lon": np.linspace(-180, 180, 20),
    }
)

# 将 lat 和 lon 堆叠成 space 维度
stacked_ds = ds.stack(space=["lat", "lon"])

输出结果

<xarray.Dataset>
Dimensions:     (time: 3, space: 200)
Coordinates:
  * time        (time) datetime64[ns] 2025-01-01 2025-01-02 ...
    space       (space) MultiIndex
      - lat     (space) float64 -90.0 -90.0 ... 90.0 90.0
      - lon     (space) float64 -180.0 -171.0 ... 171.0 180.0
Data variables:
    temperature (time, space) float64 0.1234 0.5678 ...

(2) .transpose():调整维度顺序

场景:将 time, lat, lon 的维度顺序调整为 lon, lat, time
示例代码:

# 调整维度顺序
transposed_ds = ds.transpose("lon", "lat", "time")

输出结果

<xarray.Dataset>
Dimensions:     (lon: 20, lat: 10, time: 3)
Coordinates:
  * lon         (lon) float64 -180.0 -171.0 ... 171.0 180.0
  * lat         (lat) float64 -90.0 -81.0 ... 81.0 90.0
  * time        (time) datetime64[ns] 2025-01-01 2025-01-02 ...
Data variables:
    temperature (lon, lat, time) float64 0.1234 0.5678 ...
(3) .stack() + .transpose() 联合使用

场景:先将 latlon 堆叠成 space,再调整维度顺序为 space, time
示例代码:

# 堆叠后调整维度顺序
stacked_transposed_ds = ds.stack(space=["lat", "lon"]).transpose("space", "time")

输出结果

<xarray.Dataset>
Dimensions:     (space: 200, time: 3)
Coordinates:
    space       (space) MultiIndex
      - lat     (space) float64 -90.0 -90.0 ... 90.0 90.0
      - lon     (space) float64 -180.0 -171.0 ... 171.0 180.0
  * time        (time) datetime64[ns] 2025-01-01 2025-01-02 ...
Data variables:
    temperature (space, time) float64 0.1234 0.5678 ...

(4) 关键说明
  1. .stack() vs .transpose()

    • .stack()减少维度数量,将多个维度合并为一个新维度(如 latlonspace)。
    • .transpose()不改变维度数量,仅调整维度的排列顺序(如 time, lat, lonlon, lat, time)。
  2. 应用场景

    • .stack()
      • 将多维数据转换为二维,便于进行某些计算(如机器学习模型输入)。
      • 简化高维数据的可视化(如将 latlon 合并为 space 后绘图)。
    • .transpose()
      • 调整数据维度顺序以匹配其他数据集或模型的输入格式。
      • 提高代码可读性,使维度顺序更符合逻辑(如先经度后纬度)。
  3. 注意事项

    • .stack() 会生成 MultiIndex,可通过 .unstack() 恢复原始维度。
    • .transpose() 不会修改原始数据,而是返回一个新对象(惰性操作)。
4. 数据聚合
操作/方法功能输入参数输出参数
.groupby() / .mean()按维度分组计算均值group: 分组维度(如 time.month);dim: 聚合维度聚合后的 xarray.DataArray
.resample()时间序列重采样(如日→月)freq: 重采样频率(如 MS 表示月初);dim: 时间维度名重采样后的 xarray.DataArray

示例代码

# 按月份分组计算均值
monthly_mean = da.groupby("time.month").mean(dim="time")

# 时间序列重采样(日→月)
monthly_resample = da.resample(time="MS").mean()
5. 合并两个数据集
ds2 = xr.Dataset({"precipitation": (["time", "lat", "lon"], np.random.rand(3, 10, 20))})
ds_merged = ds.merge(ds2)

输出结果

<xarray.Dataset>
Dimensions:     (time: 3, lat: 10, lon: 20)
Coordinates:
  * time        (time) datetime64[ns] 2025-01-01 2025-01-02 ...
  * lat         (lat) float64 -90.0 -81.0 ... 81.0 90.0
  * lon         (lon) float64 -180.0 -171.0 ... 171.0 180.0
Data variables:
    temperature (time, lat, lon) float64 0.1234 0.5678 ...
    humidity    (time, lat, lon) float64 0.9876 0.4321 ...
    precipitation (time, lat, lon) float64 0.3456 0.7890 ...
6. 应用自定义函数
def custom_func(arr):
    return arr.max() - arr.min()

ds_custom = ds.apply(custom_func)

输出结果

<xarray.Dataset>
Dimensions:     (time: 3, lat: 10, lon: 20)
Coordinates:
  * time        (time) datetime64[ns] 2025-01-01 2025-01-02 ...
  * lat         (lat) float64 -90.0 -81.0 ... 81.0 90.0
  * lon         (lon) float64 -180.0 -171.0 ... 171.0 180.0
Data variables:
    temperature (time, lat, lon) float64 0.4321 0.8765 ...
    humidity    (time, lat, lon) float64 0.5432 0.9876 ...

五、数据可视化

表:可视化方法

操作/方法功能输入参数输出参数
.plot()快速可视化(等值线图、色阶图)x, y: 维度名;cbar_kwargs: 颜色条参数;transform: 投影转换matplotlib.axes.Axes 对象
.plot.scatter()散点图可视化x, y: 维度名;c: 颜色变量;size: 点大小matplotlib.axes.Axes 对象
  • 示例代码
# 绘制等值线图
da.plot.contourf(x="lon", y="lat", cmap="viridis")

# 绘制散点图
da.plot.scatter(x="lon", y="lat", c="temperature", size="precipitation")

(一)二维分布图

# 绘制温度的空间分布
ds["temp"].isel(time=0).plot(cmap="viridis")
plt.title("Temperature Distribution")
plt.show()

(二)时间序列图

# 绘制单个网格点的时间序列
ds["temp"].sel(lat=40, lon=100).plot.line(x="time")
plt.title("Temperature Time Series")
plt.show()

六、高级功能

(一) 缺失值处理

1. 填充缺失值
# 用 0 填充缺失值
filled_temp = ds["temp"].fillna(0)
2. 插值
# 使用线性插值填充缺失值
interpolated = ds["temp"].interpolate_na(dim="lat", method="linear")

(二) 时间重采样

# 将日数据重采样为月均值
monthly_mean = ds.resample(time="1M").mean()

(三)地理信息处理

1. 设置坐标系
import rioxarray
ds.rio.write_crs("EPSG:4326", inplace=True)  # 设置为 WGS84 坐标系
2. 绘制地理投影图
import cartopy.crs as ccrs
ax = plt.axes(projection=ccrs.PlateCarree())
ds["temp"].isel(time=0).plot(ax=ax, transform=ccrs.PlateCarree())
ax.coastlines()
plt.show()

七、数据输入与输出

表:NetCDF 读取与保存

操作/方法功能输入参数输出参数
xr.open_dataset读取单个 NetCDF 文件filename: 文件路径;engine: 读取引擎(如 netcdf4xarray.Dataset 对象
xr.to_netcdf保存数据为 NetCDF 文件filename: 保存路径;mode: 写入模式(如 w 表示覆盖)无返回值(直接写入文件)
xr.open_mfdataset批量读取多文件数据集paths: 文件路径列表;engine: 读取引擎(如 h5netcdf);parallel: 是否并行读取;preprocess: 预处理函数合并后的 xarray.Dataset
xr.save_mfdataset批量保存数据集到文件datasets: 数据集列表;paths: 保存路径列表;encoding: 变量编码参数(如压缩设置)无返回值(直接写入文件)

(一)读取 NetCDF 文件

ds = xr.open_dataset("data.nc")  # 读取单个文件
ds = xr.open_mfdataset("data/*.nc", combine="by_coords")  # 合并多个文件

示例代码

# 批量读取 NetCDF 文件
import xarray as xr
ds = xr.open_mfdataset("data/*.nc", engine="h5netcdf", parallel=True)

# 批量保存数据集
xr.save_mfdataset([ds1, ds2], ["output1.nc", "output2.nc"], encoding={var: {"zlib": True}})

(二)保存数据

# 保存为 NetCDF 文件并启用压缩
ds.to_netcdf("output.nc", encoding={"temp": {"zlib": True}})

八、性能优化

表:数据分块与性能优化

操作/方法功能输入参数输出参数
.chunk()设置数据分块大小chunks: 分块字典(如 {"time": 10, "lat": 100}带分块的 xarray.DataArray
.compute()触发延迟计算实际计算结果(xarray.DataArrayxarray.Dataset

(一)分块处理(Dask)

import dask.array as da
ds = ds.chunk({"time": 10})  # 将时间维度分块

(二) 内存优化

  • 使用 .persist().compute() 控制计算时机。
  • 避免不必要的中间变量。

示例代码

# 设置分块
da_chunked = da.chunk({"time": 10, "lat": 100})

# 触发计算
result = da_chunked.mean().compute()

九、总结

(一)核心流程

  1. 读取数据 → 2. 访问变量 → 3. 选择/切片 → 4. 计算/分析 → 5. 保存/可视化

(二)关键优势

  • 标签化操作:通过维度名和坐标直接访问数据。
  • 高效处理:支持多维数据、地理信息和大文件分块。
  • 易用性:与 Pandas、Matplotlib 无缝集成。

(三)注意事项

  • 使用 .sel().isel() 时注意维度名称和索引范围。
  • 大数据集需结合 Dask 分块处理(.chunk())。
  • 保存时启用压缩(zlib=True)可减少文件体积。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2378855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qt5.14.2 opencv调用摄像头显示在label

ui界面添加一个Qlabel名字是默认的label 还有一个button名字是pushButton mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <opencv2/opencv.hpp> // 添加OpenCV头文件 #include <QTimer> // 添加定…

芯片生态链深度解析(三):芯片设计篇——数字文明的造物主战争

【开篇&#xff1a;设计——数字文明的“造物主战场”】 当英伟达的H100芯片以576TB/s显存带宽重构AI算力边界&#xff0c;当阿里平头哥倚天710以RISC-V架构实现性能对标ARM的突破&#xff0c;这场围绕芯片设计的全球竞赛早已超越技术本身&#xff0c;成为算法、架构与生态标准…

Rocky Linux 9.5 基于kubeadm部署k8s

一&#xff1a;部署说明 操作系统https://mirrors.aliyun.com/rockylinux/9.5/isos/x86_64/Rocky-9.5-x86_64-minimal.iso 主机名IP地址配置k8s- master192.168.1.1412颗CPU 4G内存 100G硬盘k8s- node-1192.168.1.1422颗CPU 4G内存 100G硬盘k8s- node-2192.168.1.1432…

uart16550详细说明

一、介绍 uart16550 ip core异步串行通信IP连接高性能的微控制器总线AXI,并为异步串行通信提供了 控制接口。软核设计连接了axilite接口。 二、特性 1.axilite接口用于寄存器访问和数据传输 2.16650串口和16450串口的软件和硬件寄存器都是兼容的 3.默认的core配置参数&#xf…

抢跑「中央计算+区域控制」市场,芯驰科技高端智控MCU“芯”升级

伴随着整车EE架构的加速变革&#xff0c;中国高端车规MCU正在迎来“新格局”。 在4月23日开幕的上海国际车展期间&#xff0c;芯驰科技面向新一代AI座舱推出了X10系列芯片&#xff0c;以及面向区域控制器、电驱和动力域控、高阶辅助驾驶和舱驾融合系统等的高端智控MCU产品E3系…

day015-进程管理

文章目录 1. 服务开机自启动2. 进程3. 僵尸进程3.1 处理僵尸进程3.2 查看僵尸进程3.2 排查与结束僵尸进程全流程 4. 孤儿进程5. 进程管理5.1 kill三剑客5.2 后台运行 6. 进程监控命令6.1 ps6.1.1 ps -ef6.1.2 ps aux6.1.3 VSZ、RSS6.1.4 进程状态6.1.5 进程、线程 6.2 top6.2.1…

POWER BI添加自定义字体

POWER BI添加自定义字体 POWER BI内置27种字体&#xff0c;今天分享一种很简单的添加自定义字体的方法。以更改如下pbix文件字体为例&#xff1a; 第一步&#xff1a;将该pbix文件重命名为zip文件并解压&#xff0c;找到主题json文件&#xff0c;如下图所示&#xff1a; 第二步…

协议不兼容?Profinet转Modbus TCP网关让恒压供水系统通信0障碍

在现代工业自动化领域中&#xff0c;通信协议扮演着至关重要的角色。ModbusTCP和Profinet是两种广泛使用的工业通信协议&#xff0c;它们各自在不同的应用场合中展现出独特的优势。本文将探讨如何通过开疆智能Profinet转Modbus TCP的网关&#xff0c;在恒压供水系统中实现高效的…

ChatGPT + DeepSeek 联合润色的 Prompt 模板指令合集,用来润色SCI论文太香了!

对于非英语母语的作者来说,写SCI论文的时候经常会碰到语法错误、表达不够专业、结构不清晰以及术语使用不准确等问题。传统的润色方式要么成本高、效率低,修改过程又耗时又费力。虽然AI工具可以帮助我们来润色论文,但单独用ChatGPT或DeepSeek都会存在内容泛泛、专业性不足的…

全栈项目搭建指南:Nuxt.js + Node.js + MongoDB

全栈项目搭建指南&#xff1a;Nuxt.js Node.js MongoDB 一、项目概述 我们将构建一个完整的全栈应用&#xff0c;包含&#xff1a; 前端&#xff1a;Nuxt.js (SSR渲染)后端&#xff1a;Node.js (Express/Koa框架)数据库&#xff1a;MongoDB后台管理系统&#xff1a;集成在同…

RAGFlow Arbitrary Account Takeover Vulnerability

文章目录 RAGFlowVulnerability Description[1]Vulnerability Steps[2]Vulnerability Steps[3]Vulnerability Steps RAGFlow RAGFlow is an open-source RAG (Retrieval-Augmented Generation) engine developed by Infiniflow, focused on deep document understanding and d…

Python 之 Flask 入门学习

安装 Flask 在开始使用 Flask 之前&#xff0c;需要先安装它。可以通过 pip 命令来安装 Flask&#xff1a; pip install Flask创建第一个 Flask 应用 创建一个简单的 Flask 应用&#xff0c;只需要几行代码。以下是一个最基本的 Flask 应用示例&#xff1a; from flask imp…

【Ragflow】22.RagflowPlus(v0.3.0):用户会话管理/文件类型拓展/诸多优化更新

概述 在历经三周的阶段性开发后&#xff0c;RagflowPlus顺利完成既定计划&#xff0c;正式发布v0.3.0版本。 开源地址&#xff1a;https://github.com/zstar1003/ragflow-plus 新功能 1. 用户会话管理 在后台管理系统中&#xff0c;新增用户会话管理菜单。在此菜单中&…

使用PocketFlow构建Web Search Agent

前言 本文介绍的是PocketFlow的cookbook中的pocketflow-agent部分。 回顾一下PocketFlow的核心架构&#xff1a; 每一个节点的架构&#xff1a; 具体介绍可以看上一篇文章&#xff1a; “Pocket Flow&#xff0c;一个仅用 100 行代码实现的 LLM 框架” 实现效果 这个Web S…

记录:echarts实现tooltip的某个数据常显和恢复

<template><div class"com-wapper"><div class"func-btns"><el-button type"primary" plain click"showPoint(2023)">固定显示2023年数据</el-button><el-button type"success" plain cli…

八股文--JVM(1)

⭐️⭐️JVM内存模型 程序计数器&#xff1a;可以看作是当前线程所执行的字节码的行号指示器&#xff0c;用于存储当前线程正在执行的 Java 方法的 JVM 指令地址。如果线程执行的是 Native 方法&#xff0c;计数器值为 null。是唯一一个在 Java 虚拟机规范中没有规定任何 OutOf…

从RPA项目说说RPC和MQ的使用。

去年我负责一个 RPA&#xff08;机器人流程自动化&#xff09;项目&#xff0c;帮某电商公司搭建订单处理系统。项目里有个场景特别有意思&#xff1a;当用户下单后&#xff0c;系统需要同时触发库存扣减、物流调度、积分发放三个模块。一开始我们想都没想&#xff0c;直接用 R…

UUG杭州站 | 团结引擎1.5.0 OpenHarmony新Feature介绍

PPT下载地址&#xff1a;https://u3d.sharepoint.cn/:b:/s/UnityChinaResources/EaZmiWfAAdFFmuyd6c-7_3ABhvZoaM69g4Uo2RrSzT3tZQ?e2h7RaL 在2025年4月12日的Unity User Group杭州站中&#xff0c;Unity中国OpenHarmony技术负责人刘伟贤带来演讲《团结引擎1.5.0 OpenHarmony新…

Vue3——父子组件通信

在Vue开发中&#xff0c;组件通信是核心概念之一。良好的组件通信机制能让我们的应用更加清晰、可维护。 父传子defineProps defineProps是一个编译时宏&#xff0c;仅在内部可用&#xff0c;不需要显式导入。声明的 props 会自动暴露给模板。 还返回一个对象&#xff0c;其中…

游戏引擎学习第276天:调整身体动画

运行游戏&#xff0c;演示我们遇到的拉伸问题&#xff0c;看起来不太好&#xff0c;并考虑切换到更顶视角的视角 我们开始讨论游戏开发中的一些美学决策&#xff0c;特别是在处理动画方面。虽然我们是游戏程序员&#xff0c;通常不负责设计或艺术部分&#xff0c;但因为这是一…