当前位置: 首页 > news >正文

python 给速度直径的数据打点画图

单个过程

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from datetime import datetime
import os# 设置中文字体
matplotlib.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans']
matplotlib.rcParams['axes.unicode_minus'] = False# 定义雨滴下落末速度公式
def raindrop_terminal_velocity(D_mm):"""雨滴下落末速度公式D_mm: 雨滴直径 (mm)返回: 下落速度 (m/s)"""return 9.65 - 10.3 * np.exp(-0.6 * D_mm)# 定义密实枝状冰晶经验末速度公式 (Locatelli & Hobbs, 1974)
def densely_rimed_dendrites_velocity(D_mm):"""密实枝状冰晶下落末速度公式D_mm: 最大直径 (mm)返回: 下落速度 (m/s)"""return 0.62 * (D_mm ** 0.33)# 速度数组(32个速度档位)
fall_velocity = np.array([0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95,1.1, 1.3, 1.5, 1.7, 1.9, 2.2, 2.6, 3, 3.4, 3.8,4.4, 5.2, 6, 6.8, 7.6, 8.8, 10.4, 12, 13.6, 15.2, 17.6, 20.8])# 直径中心数组(32个直径档位)
diameters_center = np.array([0.062, 0.187, 0.312, 0.437, 0.562, 0.687, 0.812, 0.937,1.062, 1.187, 1.375, 1.625, 1.875, 2.125, 2.375, 2.75,3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 8.5, 9.5,11, 13, 15, 17, 19, 21.5, 24.5
])def read_parsivel_data(filename):"""读取Parsivel雨滴谱仪数据格式:第一行时间戳,接着32行32列数据,然后空行,重复返回:times: 时间戳列表spectra: 谱数据列表(每个是32x32的数组)"""times = []spectra = []with open(filename, 'r', encoding='utf-8') as f:lines = f.readlines()i = 0while i < len(lines):# 跳过空行if not lines[i].strip():i += 1continue# 读取时间戳(第一行)time_str = lines[i].strip()try:timestamp = datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')except:# 尝试其他格式try:timestamp = datetime.strptime(time_str, '%Y-%m-%d %H:%M')except:print(f"无法解析时间: {time_str}")i += 1continuetimes.append(timestamp)i += 1# 读取32x32的矩阵matrix = []for _ in range(32):if i >= len(lines):break# 读取一行,按空格或制表符分割line = lines[i].strip()if not line:# 如果遇到空行,说明数据不完整breakrow = list(map(float, line.split()))if len(row) == 32:matrix.append(row)else:print(f"警告: 行 {i + 1} 数据长度 {len(row)} 而非 32")# 尝试用不同分隔符row = list(map(float, line.replace(',', ' ').split()))if len(row) == 32:matrix.append(row)i += 1if len(matrix) == 32:spectra.append(np.array(matrix))else:print(f"警告: 时间 {timestamp} 的数据不完整,只有 {len(matrix)} 行")# 继续处理下一个时间戳return times, spectradef get_particles_above_zero(spectrum):"""从谱数据中提取所有粒子数大于0的粒子的直径和速度返回: (diameters_list, velocities_list, counts_list)"""diameters = []velocities = []counts = []for i, v in enumerate(fall_velocity):for j, d in enumerate(diameters_center):count = spectrum[j, i]  # 注意:行是直径,列是速度if count > 0:diameters.append(d)velocities.append(v)counts.append(count)return np.array(diameters), np.array(velocities), np.array(counts)def plot_particle_scatter_on_velocity_diagram(ax, diameters, velocities, counts,cmap='hot', alpha=0.6, s_scale=10):"""在已有的速度-直径图上绘制粒子散点图"""# 归一化计数用于颜色映射和大小counts_norm = counts / counts.max() if counts.max() > 0 else counts# 绘制散点,颜色表示粒子数,大小也表示粒子数scatter = ax.scatter(diameters, velocities,c=counts_norm, cmap=cmap,s=counts_norm * s_scale + 1,  # 点大小与粒子数成正比alpha=alpha, edgecolors='black', linewidth=0.5,vmin=0, vmax=1)return scatterdef process_and_plot(filename, output_filename=None, minute_interval=1):"""主函数:读取数据并绘图"""print("正在读取数据...")times, spectra = read_parsivel_data(filename)print(f"共读取 {len(times)} 个时间点的数据")if len(times) == 0:print("没有读取到有效数据!")return# 创建图形fig, ax = plt.subplots(figsize=(14, 8))# 绘制基础曲线(与之前的图相同)D = np.linspace(0.1, 24, 500)  # 扩展到24mmv_rain = raindrop_terminal_velocity(D)v_rain_upper = v_rain * 1.6v_dendrite = densely_rimed_dendrites_velocity(D)v_dendrite_lower = v_dendrite * 0.4# 绘制雨滴经典曲线ax.plot(D, v_rain, 'b-', linewidth=2.5, label='雨滴经典末速度 (Gunn & Kinzer, 1949)')ax.plot(D, v_rain_upper, 'b--', linewidth=1.5, alpha=0.7, label='雨滴 +60% 上边界(剔除)')ax.plot(D, v_dendrite, 'g-', linewidth=2.0, label='密实枝状冰晶末速度 (Locatelli & Hobbs, 1974)')ax.plot(D, v_dendrite_lower, 'g--', linewidth=1.5, alpha=0.7, label='密实枝状 -60% 下边界(剔除)')# 填充剔除区域ax.fill_between(D, v_rain_upper, 25, color='red', alpha=0.1, label='剔除区(速度过快)')ax.fill_between(D, 0, v_dendrite_lower, color='orange', alpha=0.1, label='剔除区(速度过慢)')# 收集所有粒子数据all_diameters = []all_velocities = []all_counts = []all_times = []print("正在提取粒子数据...")for t, spec in zip(times, spectra):d, v, c = get_particles_above_zero(spec)all_diameters.extend(d)all_velocities.extend(v)all_counts.extend(c)all_times.extend([t] * len(d))all_diameters = np.array(all_diameters)all_velocities = np.array(all_velocities)all_counts = np.array(all_counts)print(f"共提取 {len(all_diameters)} 个非零粒子")print(f"直径范围: {all_diameters.min():.2f} - {all_diameters.max():.2f} mm")print(f"速度范围: {all_velocities.min():.2f} - {all_velocities.max():.2f} m/s")# 绘制粒子散点图if len(all_diameters) > 0:scatter = plot_particle_scatter_on_velocity_diagram(ax, all_diameters, all_velocities,all_counts, cmap='plasma',alpha=0.7, s_scale=20)# 添加颜色条cbar = plt.colorbar(scatter, ax=ax, shrink=0.8)cbar.set_label('相对粒子浓度', fontsize=10)# 设置坐标轴ax.set_xlabel('粒子直径 D (mm)', fontsize=12, fontweight='bold')ax.set_ylabel('下落末速度 v (m/s)', fontsize=12, fontweight='bold')ax.set_title(f'粒子相态分布图({times[0].strftime("%Y-%m-%d %H:%M")} - {times[-1].strftime("%H:%M")},共{len(times)}个样本)',fontsize=14, fontweight='bold', pad=20)ax.set_xlim(0, min(25, all_diameters.max() * 1.1))ax.set_ylim(0, min(22, all_velocities.max() * 1.1))ax.grid(True, alpha=0.3, linestyle='--')ax.axhline(y=9.65, color='gray', linestyle=':', alpha=0.5, label='雨滴渐近线 v=9.65 m/s')ax.legend(loc='upper left', fontsize=9, ncol=2)# 添加说明文字info_text = f'总粒子数: {sum(all_counts):.0f}\n非零粒子的谱元数: {len(all_diameters)}'ax.text(0.02, 0.98, info_text, transform=ax.transAxes, fontsize=10,verticalalignment='top', bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.7))ax.text(0.5, 0.95, '数据清洗规则:剔除速度 > 雨滴×1.6 或 < 密实枝状×0.4 的粒子',transform=ax.transAxes, fontsize=10,verticalalignment='top', ha='center',bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.7))# 显示公式rain_formula = r'雨滴: $v = 9.65 - 10.3 \cdot e^{-0.6D}$ (m/s)'dendrite_formula = r'密实枝状: $v = 0.62 \cdot D^{0.33}$ (m/s)'ax.text(0.6, 0.25, rain_formula, fontsize=9, transform=ax.transAxes,bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.7))ax.text(0.6, 0.2, dendrite_formula, fontsize=9, transform=ax.transAxes,bbox=dict(boxstyle='round', facecolor='lightgreen', alpha=0.7))plt.tight_layout()# 保存图片if output_filename:plt.savefig(output_filename, dpi=300, bbox_inches='tight')print(f"图片已保存至: {output_filename}")plt.show()# 统计分析print("\n" + "=" * 60)print("粒子分类统计(基于速度阈值)")print("=" * 60)# 分类统计# 计算每个粒子的理论值rain_theory = raindrop_terminal_velocity(all_diameters)dendrite_theory = densely_rimed_dendrites_velocity(all_diameters)too_fast = all_velocities > rain_theory * 1.6too_slow = all_velocities < dendrite_theory * 0.4valid = (~too_fast) & (~too_slow)print(f"有效粒子数: {valid.sum()} ({valid.sum() / len(valid) * 100:.1f}%)")print(f"速度过快(可能溅射): {too_fast.sum()} ({too_fast.sum() / len(valid) * 100:.1f}%)")print(f"速度过慢(可能湍流): {too_slow.sum()} ({too_slow.sum() / len(valid) * 100:.1f}%)")return times, spectra# 使用示例
if __name__ == "__main__":# 请将下面的文件名改为你的数据文件路径data_filename = "D:/lianxi/50425-20200109081700-20200109094159-0.txt"  # 修改为你的txt文件路径output_image = "D:/lianxi/particle_phase_diagram.png"if os.path.exists(data_filename):times, spectra = process_and_plot(data_filename, output_image)else:print(f"请将数据文件放在当前目录,并修改代码中的文件名")print(f"当前查找的文件: {data_filename}")# 如果你有示例数据,可以在这里创建一个测试文件# 或者直接指定正确的路径

多个txt随机抽取300个打点画图

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from datetime import datetime
import os
import glob
import random
from pathlib import Path# 设置中文字体
matplotlib.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans']
matplotlib.rcParams['axes.unicode_minus'] = False# 定义雨滴下落末速度公式
def raindrop_terminal_velocity(D_mm):"""雨滴下落末速度公式D_mm: 雨滴直径 (mm)返回: 下落速度 (m/s)"""return 9.65 - 10.3 * np.exp(-0.6 * D_mm)# 定义密实枝状冰晶经验末速度公式 (Locatelli & Hobbs, 1974)
def densely_rimed_dendrites_velocity(D_mm):"""密实枝状冰晶下落末速度公式D_mm: 最大直径 (mm)返回: 下落速度 (m/s)"""return 0.62 * (D_mm ** 0.33)# 速度数组(32个速度档位)
fall_velocity = np.array([0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95,1.1, 1.3, 1.5, 1.7, 1.9, 2.2, 2.6, 3, 3.4, 3.8,4.4, 5.2, 6, 6.8, 7.6, 8.8, 10.4, 12, 13.6, 15.2, 17.6, 20.8])# 直径中心数组(32个直径档位)
diameters_center = np.array([0.062, 0.187, 0.312, 0.437, 0.562, 0.687, 0.812, 0.937,1.062, 1.187, 1.375, 1.625, 1.875, 2.125, 2.375, 2.75,3.25, 3.75, 4.25, 4.75, 5.5, 6.5, 7.5, 8.5, 9.5,11, 13, 15, 17, 19, 21.5, 24.5
])def read_parsivel_data(filename):"""读取Parsivel雨滴谱仪数据格式:第一行时间戳,接着32行32列数据,然后空行,重复返回:times: 时间戳列表spectra: 谱数据列表(每个是32x32的数组)"""times = []spectra = []with open(filename, 'r', encoding='utf-8') as f:lines = f.readlines()i = 0while i < len(lines):# 跳过空行if not lines[i].strip():i += 1continue# 读取时间戳(第一行)time_str = lines[i].strip()try:timestamp = datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')except:# 尝试其他格式try:timestamp = datetime.strptime(time_str, '%Y-%m-%d %H:%M')except:print(f"  警告: 无法解析时间: {time_str}")i += 1continuetimes.append(timestamp)i += 1# 读取32x32的矩阵matrix = []for _ in range(32):if i >= len(lines):breakline = lines[i].strip()if not line:breaktry:row = list(map(float, line.split()))if len(row) == 32:matrix.append(row)else:# 尝试其他分隔符row = list(map(float, line.replace(',', ' ').split()))if len(row) == 32:matrix.append(row)except:passi += 1if len(matrix) == 32:spectra.append(np.array(matrix))else:print(f"  警告: 时间 {timestamp} 的数据不完整,只有 {len(matrix)} 行")return times, spectradef get_all_particles(spectra):"""从谱数据列表中提取所有粒子数大于0的粒子的直径和速度返回: (diameters_list, velocities_list, counts_list)"""all_diameters = []all_velocities = []all_counts = []for spectrum in spectra:for i, v in enumerate(fall_velocity):for j, d in enumerate(diameters_center):count = spectrum[j, i]  # 注意:行是直径,列是速度if count > 0:all_diameters.append(d)all_velocities.append(v)all_counts.append(count)return np.array(all_diameters), np.array(all_velocities), np.array(all_counts)def batch_process_random_sample(directory, pattern="*.txt", n_samples=300,output_filename="random_sample_particle_phase.png",use_colormap=True, alpha=0.6, random_seed=42):"""随机抽取指定数量的txt文件,将所有数据画在同一个图上参数:directory: 包含txt文件的目录路径pattern: 文件匹配模式,默认"*.txt"n_samples: 随机抽取的文件数量,默认300output_filename: 输出图片文件名use_colormap: 是否使用不同颜色区分不同文件alpha: 散点透明度random_seed: 随机种子,确保结果可重复"""# 设置随机种子
    random.seed(random_seed)np.random.seed(random_seed)# 获取所有匹配的文件search_pattern = os.path.join(directory, pattern)all_files = glob.glob(search_pattern)all_files.sort()  # 先排序print(f"在目录中找到 {len(all_files)} 个txt文件")if len(all_files) == 0:print(f"在 {directory} 中没有找到匹配 {pattern} 的文件")return# 随机抽取n_samples个文件if len(all_files) <= n_samples:selected_files = all_filesprint(f"文件总数({len(all_files)})不足{n_samples}个,将使用全部文件")else:selected_files = random.sample(all_files, n_samples)print(f"随机抽取 {n_samples} 个文件进行绘图")# 创建图形fig, ax = plt.subplots(figsize=(16, 10))# 绘制基础曲线(只画理论曲线,不画剔除边界)D = np.linspace(0.1, 24, 500)v_rain = raindrop_terminal_velocity(D)v_dendrite = densely_rimed_dendrites_velocity(D)# 绘制雨滴经典曲线ax.plot(D, v_rain, 'b-', linewidth=2.5, label='雨滴经典末速度 (Gunn & Kinzer, 1949)', zorder=10)ax.plot(D, v_dendrite, 'g-', linewidth=2.0, label='密实枝状冰晶末速度 (Locatelli & Hobbs, 1974)', zorder=10)# 如果需要显示剔除边界(可选),取消下面的注释# v_rain_upper = v_rain * 1.6# v_dendrite_lower = v_dendrite * 0.4# ax.plot(D, v_rain_upper, 'b--', linewidth=1.5, alpha=0.7, label='雨滴 +60% 上边界', zorder=10)# ax.plot(D, v_dendrite_lower, 'g--', linewidth=1.5, alpha=0.7, label='密实枝状 -60% 下边界', zorder=10)# ax.fill_between(D, v_rain_upper, 25, color='red', alpha=0.1, label='速度过快区')# ax.fill_between(D, 0, v_dendrite_lower, color='orange', alpha=0.1, label='速度过慢区')# 生成颜色(如果使用不同颜色区分文件)if use_colormap and len(selected_files) > 1:colors = plt.cm.tab20(np.linspace(0, 1, min(len(selected_files), 20)))if len(selected_files) > 20:colors = plt.cm.gist_ncar(np.linspace(0, 1, len(selected_files)))else:colors = ['gray'] * len(selected_files)# 存储统计信息file_stats = []all_diameters_total = []all_velocities_total = []all_counts_total = []# 处理每个选中的文件for idx, filepath in enumerate(selected_files):filename = os.path.basename(filepath)print(f"\n处理文件 {idx + 1}/{len(selected_files)}: {filename}")try:# 读取数据times, spectra = read_parsivel_data(filepath)print(f"  读取到 {len(times)} 个时间点的数据")if len(spectra) == 0:print(f"  跳过:无有效数据")continue# 提取粒子diameters, velocities, counts = get_all_particles(spectra)total_particles = np.sum(counts)n_spectra_elements = len(diameters)print(f"  总粒子数: {total_particles:.0f}")print(f"  非零谱元数: {n_spectra_elements}")if n_spectra_elements == 0:continue# 存储统计信息
            file_stats.append({'filename': filename,'times': times,'n_samples': len(times),'total_particles': total_particles,'n_spectra_elements': n_spectra_elements,'diameters': diameters,'velocities': velocities,'counts': counts})# 累积总数据
            all_diameters_total.extend(diameters)all_velocities_total.extend(velocities)all_counts_total.extend(counts)# 绘制散点(每个文件用不同颜色)color = colors[idx] if use_colormap else colors[0]# 归一化计数用于点大小counts_norm = counts / counts.max() if counts.max() > 0 else countss = counts_norm * 15 + 2  # 点大小# 获取图例标签(简化显示,避免图例过多)if len(times) > 0:if len(times) == 1:time_label = times[0].strftime("%m-%d %H:%M")else:time_label = f"{times[0].strftime('%m-%d %H:%M')}\n{times[-1].strftime('%H:%M')}"else:time_label = filename[:20]# 只有非零谱元数较多的文件才显示在图例中,避免图例过多if n_spectra_elements > 500:label = time_labelelse:label = ""scatter = ax.scatter(diameters, velocities,c=[color] * len(diameters) if not use_colormap else counts_norm,s=s, alpha=alpha, edgecolors='none',label=label if label else "",cmap='plasma' if use_colormap else None,vmin=0, vmax=1 if use_colormap else None,zorder=5)except Exception as e:print(f"  处理出错: {e}")continue# 设置坐标轴if len(all_diameters_total) > 0:all_diameters_total = np.array(all_diameters_total)all_velocities_total = np.array(all_velocities_total)all_counts_total = np.array(all_counts_total)# 动态设置坐标轴范围x_max = min(25, all_diameters_total.max() * 1.1)y_max = min(22, all_velocities_total.max() * 1.1)ax.set_xlim(0, x_max)ax.set_ylim(0, y_max)# 总体统计total_particles_all = np.sum(all_counts_total)print("\n" + "=" * 60)print("随机抽样总体统计")print("=" * 60)print(f"总文件数: {len(file_stats)}")print(f"总粒子数: {total_particles_all:.0f}")print(f"总非零谱元数: {len(all_diameters_total)}")print(f"直径范围: {all_diameters_total.min():.2f} - {all_diameters_total.max():.2f} mm")print(f"速度范围: {all_velocities_total.min():.2f} - {all_velocities_total.max():.2f} m/s")# 计算平均每个谱元的粒子数avg_particles_per_bin = total_particles_all / len(all_diameters_total)print(f"平均每个谱元粒子数: {avg_particles_per_bin:.2f}")# 添加颜色条(如果使用了colormap)if use_colormap and len(file_stats) > 0:cbar = plt.colorbar(scatter, ax=ax, shrink=0.6)cbar.set_label('相对粒子浓度', fontsize=10)# 设置图形属性ax.set_xlabel('粒子直径 D (mm)', fontsize=12, fontweight='bold')ax.set_ylabel('下落末速度 v (m/s)', fontsize=12, fontweight='bold')title = f'随机抽样粒子相态分布图(抽取{len(selected_files)}个文件,总粒子数{total_particles_all:.0f})'ax.set_title(title, fontsize=14, fontweight='bold', pad=20)ax.grid(True, alpha=0.3, linestyle='--')ax.axhline(y=9.65, color='gray', linestyle=':', alpha=0.5, label='雨滴渐近线 v=9.65 m/s')# 图例处理(限制数量)handles, labels = ax.get_legend_handles_labels()if len(labels) > 15:# 只保留前10个handles = handles[:10]labels = labels[:10]labels.append(f'... 共{len(file_stats)}个文件')if len(handles) > 0:ax.legend(handles=handles, loc='upper left', fontsize=8, ncol=2, markerscale=0.5)# 添加说明文字info_text = f'随机抽取文件数: {len(selected_files)}\n有效文件数: {len(file_stats)}\n总粒子数: {total_particles_all:.0f}\n非零谱元数: {len(all_diameters_total)}'ax.text(0.02, 0.98, info_text, transform=ax.transAxes, fontsize=10,verticalalignment='top', bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.7))# 显示公式rain_formula = r'雨滴: $v = 9.65 - 10.3 \cdot e^{-0.6D}$ (m/s)'dendrite_formula = r'密实枝状: $v = 0.62 \cdot D^{0.33}$ (m/s)'ax.text(0.6, 0.25, rain_formula, fontsize=9, transform=ax.transAxes,bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.7))ax.text(0.6, 0.2, dendrite_formula, fontsize=9, transform=ax.transAxes,bbox=dict(boxstyle='round', facecolor='lightgreen', alpha=0.7))plt.tight_layout()# 保存图片if output_filename:plt.savefig(output_filename, dpi=300, bbox_inches='tight')print(f"\n图片已保存至: {output_filename}")plt.show()return file_stats, selected_filesdef batch_process_multiple_random_samples(directory, pattern="*.txt",n_samples=300, n_iterations=5,output_dir=None, random_seed=42):"""多次随机抽样,生成多张图(用于对比不同抽样结果)参数:directory: 包含txt文件的目录路径pattern: 文件匹配模式n_samples: 每次随机抽取的文件数量n_iterations: 抽样次数output_dir: 输出图片目录random_seed: 随机种子基础值"""if output_dir is None:output_dir = os.path.join(directory, "random_samples")os.makedirs(output_dir, exist_ok=True)for i in range(n_iterations):print(f"\n{'=' * 60}")print(f"第 {i + 1}/{n_iterations} 次随机抽样")print(f"{'=' * 60}")output_filename = os.path.join(output_dir, f"random_sample_{i + 1:03d}.png")batch_process_random_sample(directory=directory,pattern=pattern,n_samples=n_samples,output_filename=output_filename,use_colormap=True,alpha=0.6,random_seed=random_seed + i  # 每次使用不同的随机种子
        )print(f"\n所有随机抽样图片已保存至: {output_dir}")# 使用示例
if __name__ == "__main__":# 设置数据目录data_directory = "D:/03-雨滴谱/雨滴谱数据/原始数据/季节分类结果/冬季"# ========== 方式1:随机抽取300个文件,画在一张图上 ==========print("=" * 60)print("随机抽取300个文件,画在同一张图上")print("=" * 60)output_image = "D:/lianxi/random_300_particle_phase.png"file_stats, selected_files = batch_process_random_sample(directory=data_directory,pattern="*.txt",n_samples=300,  # 随机抽取300个文件output_filename=output_image,use_colormap=True,  # 不同文件用不同颜色alpha=0.6,  # 透明度random_seed=42  # 随机种子,确保结果可重复
    )# 打印被抽中的文件列表(可选)if file_stats:print("\n" + "=" * 60)print("被抽中的文件列表:")print("=" * 60)for stat in file_stats:print(f"  {stat['filename']} (粒子数: {stat['total_particles']:.0f})")# ========== 方式2:多次随机抽样,生成多张图(可选) ==========# 如果要进行多次抽样进行对比,取消下面的注释# print("\n" + "="*60)# print("多次随机抽样,生成多张对比图")# print("="*60)#
    # batch_process_multiple_random_samples(#     directory=data_directory,#     pattern="*.txt",#     n_samples=300,          # 每次抽取300个#     n_iterations=5,         # 抽取5次#     output_dir="D:/lianxi/random_samples",#     random_seed=42# )# ========== 方式3:如果文件总数不足300,自动使用全部文件 ==========# 这个功能已经在函数中自动处理

 

random_300_particle_phase

 

http://www.jsqmd.com/news/772530/

相关文章:

  • 评估预算超支预警,深度解析SITS2026框架下AISMM三级评估的真实人力/工具/认证成本构成
  • 告别Docker命令记忆:Go语言TUI工具goManageDocker容器管理实战
  • 【云藏山鹰代数信息系统】浅析意气实体过程知识图谱13
  • Struts2-Scan终极指南:全漏洞扫描利用工具深度解析
  • 3步搭建QQ空间记忆保险库:GetQzonehistory数据备份终极方案
  • 在Hermes Agent项目中自定义Provider接入Taotoken聚合服务
  • 深入理解Linux网络子系统:以RK3568为例,图解MAC、MDIO总线与PHY芯片的协作机制
  • 告别黑盒:手把手教你用Max2Babylon插件调试glTF动画与蒙皮导出
  • Vue3项目实战:把vue-plugin-hiprint打印设计器集成到你的低代码平台里
  • Playnite游戏管理器:一站式解决方案管理所有平台游戏库
  • 项目脚手架工具Cupcake:基于模板的自动化项目初始化实践
  • Keil MDK下解决‘No space in execution regions’内存溢出报错的5个实战技巧
  • Zynq UltraScale+ SoM在LiDAR实时数据处理中的应用与优化
  • 3分钟掌握手机号查QQ号:Python工具快速查询终极指南
  • 三维视觉革命:MultiDIC如何重塑材料力学与生物医学测量
  • 别再只会用to_csv了!Pandas数据导出全攻略:CSV、JSON、HTML、Excel格式怎么选?
  • 别再只把继电器当开关了!巧用它的“回差电压”做个振荡器
  • 高斯泼溅技术在3D场景理解与深度估计中的应用
  • 从一道CTF题出发:手把手教你用Python暴力破解AES-ECB模式加密的Flag(附完整代码与避坑指南)
  • 别再手动算坐标了!用Rust eGUI的Panel布局,像搭积木一样设计界面
  • 【云藏山鹰代数信息系统】浅析意气实体过程知识图谱14
  • dashboard和helm
  • 开发 AI 应用原型时利用 Taotoken 快速切换测试不同模型效果
  • 从零到一:so-vits-svc 4.1歌声转换全流程实战指南
  • 避开电赛踩坑点:TI MSPM0的UART配置,时钟源选择MFCLK还是默认MCLK?
  • 2026年教培行业专业AI搜索生成式优化(GEO)公司选型推荐与核心能力解析 - 产业观察网
  • FPGA高速通信实战:手把手教你用Vivado配置Aurora 8B/10B IP核(附完整代码)
  • 别再只用MATLAB仿真了!双线性插值算法的FPGA实现细节与性能优化指南
  • 【Protobuf】Python使用Protobuf
  • 用状态机玩转蓝桥杯单片机LED:一个框架搞定流水灯、闪烁和状态指示