概述

        TOPSIS(逼近理想解排序法)是一种多属性决策方法,通过计算各方案与 “理想解”“负理想解” 的距离,排序选最优。

操作步骤

  1. 输入原始决策矩阵(方案 × 指标);
  2. 标准化处理(消除量纲);
  3. 确定指标权重(如 AHP、熵权法);
  4. 计算加权标准化矩阵;
  5. 找理想解(各指标最大值)、负理想解(各指标最小值);
  6. 算各方案到两解的欧式距离;
  7. 求贴近度并排序。

输入原始矩阵
消除量纲,进行标准化处理
通过某些方法,如层次分析法等得到权重向量
标准化矩阵与权重向量相乘得到结果矩阵
按照题意 从结果矩阵中构造出理想解和负理想解
然后计算每个方案与最优目标、最劣目标的欧氏距离,进行排序
就能对方案的好坏进行得到结论了

包含了极大型和极小型指标的处理

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# -------------------------- 1. 读取数据 + 自动筛选数值列(核心修改)--------------------------
file_path = r'F:\01\study\2.熵权TOPSIS\TOPSIS.xlsx'
data = pd.read_excel(file_path)  # 读取所有列(含“方案名称”等非数值列)# 自动筛选数值列:仅保留int/float类型的列(排除字符串列如“方案名称”)
# select_dtypes(include=[np.number]) → 筛选所有数值类型列
numeric_data = data.select_dtypes(include=[np.number]).copy()
# 提取数值列的列名(用于后续极小型指标匹配、权重输出)
numeric_columns = numeric_data.columns.tolist()# 检查数值列是否存在(防止Excel表无数值列导致报错)
if len(numeric_columns) == 0:raise ValueError("Excel表中未检测到数值类型列,请检查数据格式!")# -------------------------- 2. 数据标准化(逻辑不变,仅用自动识别的数值列)--------------------------
def standardize_data(df, min_columns):df_std = df.copy()for column in df_std.columns:max_val = df_std[column].max()min_val = df_std[column].min()# 处理极端情况:某列所有值相同(避免除以0)if max_val == min_val:df_std[column] = 0.0else:if column in min_columns:  # 极小型指标反向标准化df_std[column] = (max_val - df_std[column]) / (max_val - min_val)else:  # 极大型指标正向标准化df_std[column] = (df_std[column] - min_val) / (max_val - min_val)return df_std# -------------------------- 3. 计算熵权(逻辑不变)--------------------------
def calculate_entropy_weights(df):# 概率矩阵(避免0值导致log报错)prob_matrix = df.div(df.sum(axis=0) + np.finfo(float).eps, axis=1)# 计算熵值entropy = -np.sum(prob_matrix * np.log(prob_matrix + np.finfo(float).eps), axis=0) / np.log(len(df))# 计算权重(确保权重和为1)weights = (1 - entropy) / (1 - entropy).sum()return weights# -------------------------- 4. TOPSIS算法(逻辑不变)--------------------------
def topsis(df, weights):# 加权标准化weighted_normalized_df = df.mul(weights, axis=1)# 确定理想解(正理想解:最大值;负理想解:最小值)ideal_best = weighted_normalized_df.max(axis=0)ideal_worst = weighted_normalized_df.min(axis=0)# 计算欧氏距离distance_to_best = np.sqrt(((weighted_normalized_df - ideal_best) ** 2).sum(axis=1))distance_to_worst = np.sqrt(((weighted_normalized_df - ideal_worst) ** 2).sum(axis=1))# 计算相对贴近度(避免分母为0)relative_closeness = distance_to_worst / (distance_to_best + distance_to_worst + np.finfo(float).eps)return relative_closeness# -------------------------- 5. 用户输入与主流程(适配自动识别的数值列)--------------------------
# 1. 向用户展示自动识别的数值列及对应索引(便于用户正确输入极小型指标)
print("自动识别的数值指标列(索引从1开始):")
for idx, col in enumerate(numeric_columns, 1):print(f"{idx}: {col}")# 2. 获取用户输入的极小型指标索引
min_columns_input = input("\n请输入极小型指标的列索引(用空格分隔,如2 3 5): ").split()
try:min_columns_index = [int(i) for i in min_columns_input]# 验证索引是否在有效范围内(防止用户输入超出数值列数量的索引)for idx in min_columns_index:if idx < 1 or idx > len(numeric_columns):raise ValueError(f"索引{idx}无效!有效索引范围为1-{len(numeric_columns)}")
except ValueError as e:print(f"输入错误:{e}")exit()  # 输入错误时退出程序,避免后续报错# 3. 根据索引获取极小型指标的列名(索引1对应numeric_columns[0])
min_columns = [numeric_columns[i-1] for i in min_columns_index]# -------------------------- 6. 执行核心计算 + 结果整合--------------------------
standardized_data = standardize_data(numeric_data, min_columns)  # 标准化数值列
weights = calculate_entropy_weights(standardized_data)  # 计算熵权
topsis_scores = topsis(standardized_data, weights)  # 计算TOPSIS得分# 将得分合并到原始数据(保留“方案名称”等非数值列)
data['TOPSIS_Score'] = topsis_scores
# 按得分降序排序(便于查看最优方案)
data_sorted = data.sort_values(by='TOPSIS_Score', ascending=False).reset_index(drop=True)# -------------------------- 7. 结果保存与可视化(适配自动识别的列)--------------------------
# 保存结果到Excel
output_path = 'processed_data_with_topsis.xlsx'
data_sorted.to_excel(output_path, index=False)# 可视化(用“方案名称”作为x轴,需先确认“方案名称”列存在)
if '方案名称' in data.columns:x_labels = data_sorted['方案名称']
else:# 若无“方案名称”列,用“样本1、样本2...”作为标识x_labels = [f"样本{i+1}" for i in range(len(data_sorted))]# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题plt.figure(figsize=(12, 8))
bars = plt.bar(x_labels, data_sorted['TOPSIS_Score'], color='skyblue')
# 在柱状图上添加具体得分
for bar in bars:height = bar.get_height()plt.text(bar.get_x() + bar.get_width()/2., height + 0.01,f'{height:.4f}', ha='center', va='bottom', fontsize=10)plt.xlabel('方案/样本', fontsize=12)
plt.ylabel('TOPSIS得分(越高越优)', fontsize=12)
plt.title('各方案TOPSIS得分对比', fontsize=14, fontweight='bold')
plt.ylim(0, 1.1)  # 调整y轴范围,避免得分显示不全
plt.grid(axis='y', alpha=0.3)
plt.tight_layout()  # 自动调整布局,防止标签截断
plt.savefig('topsis_scores.png', format='png', dpi=300)
plt.show()# -------------------------- 8. 输出结果信息--------------------------
print(f"\n✅ 数据已保存至: {output_path}")
print(f"✅ 可视化图表已保存至: topsis_scores.png")print("\n📊 各指标熵权:")
weights_series = pd.Series(weights, index=numeric_columns)
for col, weight in weights_series.items():print(f"{col}: {weight:.6f}")print("\n🏆 各方案TOPSIS得分(降序):")
for idx, row in data_sorted.iterrows():# 优先用“方案名称”标识,无则用样本索引if '方案名称' in data_sorted.columns:scheme_name = row['方案名称']else:scheme_name = f"样本{idx+1}"print(f"{scheme_name}: {row['TOPSIS_Score']:.6f}")
方案名称产品质量(%交货周期(天)价格(元)售后服务评分(10 分)订单响应速度(小时)
供应商 A9552008.52
供应商 B9271807.83
供应商 C9842209.21.5
供应商 D90619082.5

F:\01\study\.venv\Scripts\python.exe F:\01\study\2.熵权TOPSIS\2.熵权TOPSIS模型.py 
自动识别的数值指标列(索引从1开始):
1: 产品质量(%)
2: 交货周期(天)
3: 价格(元)
4: 售后服务评分(10 分)
5: 订单响应速度(小时)

请输入极小型指标的列索引(用空格分隔,如2 3 5): 2 3 5

✅ 数据已保存至: processed_data_with_topsis.xlsx
✅ 可视化图表已保存至: topsis_scores.png

📊 各指标熵权:
产品质量(%): 0.207976
交货周期(天): 0.187343
价格(元): 0.162630
售后服务评分(10 分): 0.254707
订单响应速度(小时): 0.187343

🏆 各方案TOPSIS得分(降序):
供应商 C: 0.721959
供应商 A: 0.581576
供应商 D: 0.305729
供应商 B: 0.299548

加入了对中间型指标和区间型指标的处理

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# -------------------------- 1. 读取数据并自动筛选数值列 --------------------------
file_path = r'F:\01\study\2.熵权TOPSIS\TOPSIS.xlsx'  # 替换为你的文件路径
data = pd.read_excel(file_path)# 自动筛选数值列(排除字符串列如“方案名称”)
numeric_data = data.select_dtypes(include=[np.number]).copy()
numeric_columns = numeric_data.columns.tolist()if not numeric_columns:raise ValueError("未检测到数值列,请检查数据格式!")# -------------------------- 2. 扩展标准化函数(支持4类指标) --------------------------
def standardize_data(df, max_cols, min_cols, mid_cols, interval_cols):"""标准化数据:根据指标类型应用不同公式参数:- df: 数值型数据框- max_cols: 极大型指标(列名列表)- min_cols: 极小型指标(列名列表)- mid_cols: 中间型指标(字典,{列名: 最优值})- interval_cols: 区间型指标(字典,{列名: (下限a, 上限b)})返回:标准化后的DataFrame(值越大越优)"""df_std = df.copy()for column in df_std.columns:x = df_std[column]x_max = x.max()x_min = x.min()# 1. 极大型指标if column in max_cols:if x_max == x_min:df_std[column] = 0.0else:df_std[column] = (x - x_min) / (x_max - x_min)# 2. 极小型指标elif column in min_cols:if x_max == x_min:df_std[column] = 0.0else:df_std[column] = (x_max - x) / (x_max - x_min)# 3. 中间型指标elif column in mid_cols:x_best = mid_cols[column]  # 最优值# 计算最大偏差(用于分母,避免为0)max_deviation = max(x_max - x_best, x_best - x_min)if max_deviation == 0:df_std[column] = 1.0  # 所有值都等于最优值else:df_std[column] = 1 - np.abs(x - x_best) / max_deviation# 4. 区间型指标elif column in interval_cols:a, b = interval_cols[column]  # 最优区间[a, b]if a > b:raise ValueError(f"区间型指标{column}的下限a必须≤上限b!")# 计算最大偏离范围(用于分母)max_range = max(a - x_min, x_max - b)if max_range == 0:df_std[column] = 1.0  # 所有值都在区间内else:# 分情况计算标准化值df_std[column] = np.where(x < a, 1 - (a - x) / max_range,np.where(x > b, 1 - (x - b) / max_range, 1.0))# 未指定类型的指标(默认按极大型处理,或报错)else:raise ValueError(f"指标{column}未指定类型(极大型/极小型/中间型/区间型)!")return df_std# -------------------------- 3. 熵权计算与TOPSIS核心逻辑(不变) --------------------------
def calculate_entropy_weights(df):prob_matrix = df.div(df.sum(axis=0) + np.finfo(float).eps, axis=1)entropy = -np.sum(prob_matrix * np.log(prob_matrix + np.finfo(float).eps), axis=0) / np.log(len(df))weights = (1 - entropy) / (1 - entropy).sum()return weightsdef topsis(df, weights):weighted_normalized_df = df.mul(weights, axis=1)ideal_best = weighted_normalized_df.max(axis=0)ideal_worst = weighted_normalized_df.min(axis=0)distance_to_best = np.sqrt(((weighted_normalized_df - ideal_best) ** 2).sum(axis=1))distance_to_worst = np.sqrt(((weighted_normalized_df - ideal_worst) ** 2).sum(axis=1))return distance_to_worst / (distance_to_best + distance_to_worst + np.finfo(float).eps)# -------------------------- 4. 用户输入:指定指标类型及参数 --------------------------
# 显示自动识别的数值列及索引
print("自动识别的数值指标列(索引从1开始):")
for idx, col in enumerate(numeric_columns, 1):print(f"{idx}: {col}")# 1. 极大型指标
max_input = input("\n请输入极大型指标的列索引(用空格分隔,如1 4): ").split()
max_index = [int(i) - 1 for i in max_input]  # 转换为0-based索引
max_columns = [numeric_columns[i] for i in max_index]# 2. 极小型指标
min_input = input("请输入极小型指标的列索引(用空格分隔,如2 3): ").split()
min_index = [int(i) - 1 for i in min_input]
min_columns = [numeric_columns[i] for i in min_index]# 3. 中间型指标(需输入索引和最优值)
mid_columns = {}
mid_input = input("请输入中间型指标的列索引(用空格分隔,如5): ").split()
if mid_input:mid_index = [int(i) - 1 for i in mid_input]for idx in mid_index:col = numeric_columns[idx]x_best = float(input(f"请输入中间型指标「{col}」的最优值: "))mid_columns[col] = x_best# 4. 区间型指标(需输入索引和区间[a, b])
interval_columns = {}
interval_input = input("请输入区间型指标的列索引(用空格分隔,如6): ").split()
if interval_input:interval_index = [int(i) - 1 for i in interval_input]for idx in interval_index:col = numeric_columns[idx]a, b = map(float, input(f"请输入区间型指标「{col}」的最优区间[a, b](用空格分隔,如36 37): ").split())interval_columns[col] = (a, b)# -------------------------- 5. 验证指标类型无重复 --------------------------
all_specified = set(max_columns) | set(min_columns) | set(mid_columns.keys()) | set(interval_columns.keys())
if len(all_specified) != len(max_columns) + len(min_columns) + len(mid_columns) + len(interval_columns):raise ValueError("存在指标被重复指定类型,请检查输入!")if set(all_specified) != set(numeric_columns):missing = set(numeric_columns) - all_specifiedraise ValueError(f"以下指标未指定类型:{missing}")# -------------------------- 6. 执行计算与结果输出 --------------------------
# 标准化数据
standardized_data = standardize_data(numeric_data,max_cols=max_columns,min_cols=min_columns,mid_cols=mid_columns,interval_cols=interval_columns
)# 计算熵权与TOPSIS得分
weights = calculate_entropy_weights(standardized_data)
topsis_scores = topsis(standardized_data, weights)# 合并结果并排序
data['TOPSIS_Score'] = topsis_scores
data_sorted = data.sort_values(by='TOPSIS_Score', ascending=False).reset_index(drop=True)# -------------------------- 7. 结果保存与可视化 --------------------------
# 保存结果
output_path = 'topsis_results_with_all_types.xlsx'
data_sorted.to_excel(output_path, index=False)# 可视化
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x_labels = data_sorted['方案名称'] if '方案名称' in data.columns else [f'样本{i + 1}' for i in range(len(data))]plt.figure(figsize=(12, 8))
bars = plt.bar(x_labels, data_sorted['TOPSIS_Score'], color='lightgreen')
for bar in bars:height = bar.get_height()plt.text(bar.get_x() + bar.get_width() / 2, height + 0.01,f'{height:.4f}', ha='center', va='bottom')plt.xlabel('方案')
plt.ylabel('TOPSIS得分(越高越优)')
plt.title('各方案TOPSIS得分对比(含中间型/区间型指标)')
plt.ylim(0, 1.1)
plt.grid(axis='y', alpha=0.3)
plt.tight_layout()
plt.savefig('topsis_scores_all_types.png', dpi=300)
plt.show()# -------------------------- 8. 打印结果 --------------------------
print(f"\n结果已保存至:{output_path}")
print(f"可视化图表已保存至:topsis_scores_all_types.png")print("\n各指标熵权:")
for col, w in weights.items():print(f"{col}: {w:.6f}")print("\n各方案TOPSIS得分(降序):")
for i, row in data_sorted.iterrows():name = row['方案名称'] if '方案名称' in row else f'样本{i + 1}'print(f"{name}: {row['TOPSIS_Score']:.6f}")
方案名称产品合格率(%)售后服务评分(10 分制)交货周期(天)产品单价(元 / 件)生产能耗(kWh / 件)产品尺寸偏差(mm)仓储温度(℃)原材料纯度(%)
供应商 A98.29.151855.20.1222.599.2
供应商 B96.58.571704.80.0819.398.3
供应商 C999.5419250.1123.899
供应商 D97.88.861785.50.1526.199.6
供应商 E95.38.281654.50.0918.798.8
供应商 F98.59.351805.10.124.299.4

F:\01\study\.venv\Scripts\python.exe F:\01\study\2.熵权TOPSIS\2.熵权TOPSIS模型.py 
自动识别的数值指标列(索引从1开始):
1: 产品合格率(%)
2: 售后服务评分(10 分制)
3: 交货周期(天)
4: 产品单价(元 / 件)
5: 生产能耗(kWh / 件)
6: 产品尺寸偏差(mm)
7: 仓储温度(℃)
8: 原材料纯度(%)

请输入极大型指标的列索引(用空格分隔,如1 4): 1 2
请输入极小型指标的列索引(用空格分隔,如2 3): 3 4
请输入中间型指标的列索引(用空格分隔,如5): 5 6
请输入中间型指标「生产能耗(kWh / 件)」的最优值: 5
请输入中间型指标「产品尺寸偏差(mm)」的最优值: 0.1
请输入区间型指标的列索引(用空格分隔,如6): 7 8
请输入区间型指标「仓储温度(℃)」的最优区间[a, b](用空格分隔,如36 37): 35 37
请输入区间型指标「原材料纯度(%)」的最优区间[a, b](用空格分隔,如36 37): 40 60

结果已保存至:topsis_results_with_all_types.xlsx
可视化图表已保存至:topsis_scores_all_types.png

各指标熵权:
产品合格率(%): 0.099616
售后服务评分(10 分制): 0.117754
交货周期(天): 0.111792
产品单价(元 / 件): 0.117166
生产能耗(kWh / 件): 0.179717
产品尺寸偏差(mm): 0.084347
仓储温度(℃): 0.144930
原材料纯度(%): 0.144679

各方案TOPSIS得分(降序):
供应商 F: 0.739305
供应商 C: 0.695332
供应商 A: 0.589764
供应商 B: 0.480903
供应商 D: 0.377151
供应商 E: 0.333267

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Base64 编码优化 Web 图片加载:异步响应式架构(Java 后端 + 前端全流程实现)

异步响应式图片加载与Base64编码实现方案 在Web开发中&#xff0c;图片加载效率直接影响页面性能和用户体验。本文介绍一套基于Java后端和JavaScript前端的实现方案&#xff0c;通过Base64编码传输图片&#xff0c;结合异步加载和响应式布局&#xff0c;实现高效、安全的图片展…

【C语言】分支和循环

目录 前置&#xff1a;关系操作符和逻辑操作符 关系操作符 逻辑操作符 其他补充知识 分支语句&#xff1a; 一、if类 基本式&#xff1a;if... 变式1&#xff1a;if...else... 变式2&#xff1a;if...else if...else... 变式3&#xff1a;嵌套 二、switch 循环语句&…

商超客流密度统计误差率↓35%!陌讯多模态融合算法在零售智慧运营的实战解析

原创声明 本文为原创技术解析文章&#xff0c;核心技术参数与架构设计引用自 “陌讯技术白皮书&#xff08;2024 版&#xff09;”&#xff0c;技术描述均经过重写转换&#xff0c;无复制官网文案情况&#xff0c;仅用于计算机视觉技术交流与实战经验分享。 一、零售客流统计的…

游戏空间划分技术

【前言】 空间划分主要是为了降低搜索比较量&#xff0c;如果不采用空间划分&#xff0c;暴力遍历也是可以求解的&#xff0c;但耗时过长。通过空间划分将全局搜索简化为为局部搜索&#xff0c;大大降低搜索量。 搜索出来后最终还要是一一比较&#xff0c;比较的是距离&#…

【C#】观察者模式 + UI 线程调度、委托讲解

“观察者模式 UI 线程调度”的典型应用A. 涉及的知识点&#xff08;抽象&#xff09;观察者模式&#xff08;Observer Pattern&#xff09; 发布者&#xff1a;DemoDeviceService.cs 内部生成一帧数据 ScopeFrame&#xff0c;通过 OnScopeFrame?.Invoke(frame) 发布事件。订阅…

Linux应用软件编程---网络编程(TCP:[ 其他机制、头部标志位、应用示例 ]、 HTTP:[ 万维网、概念、格式、报文、应用示例 ]

一、TCP 网络协议补充内容1、TCP 的其他机制1&#xff09;TCP 头部的标志位TCP 头部可用抓包工具 (wireshark) 来查看。头部标志位用途SYN请求建立连接标志位ACK响应报文标志位PSH携带数据标志位&#xff0c;通知接收方该从缓冲区读数据FIN请求断开连接标志位RST复位标志位URG紧…

基于开源飞控pix的无人机装调与测试

文章目录 前言资源下载1、地面站软件独家汉化版QGC地面站&#xff08;推荐&#xff09;原版QGC地面站Mission Planner地面站 2、安装好环境的虚拟机安装虚拟机打开虚拟机文件 3、完整的各版本PX4、QGC源码PX4QGC 一、无人机基本常识/预备知识&#xff08;1&#xff09;无人机飞…

Ubuntu解决makefile交叉编译的问题

问题1&#xff1a;/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: cannot find -lwiringpi: No such file or directory 找不到-lwiringpi库路径&#xff0c;其实在3rd/usr/lib/aarch64-linux-gnu下没有libwiringPi.so.2 …

ExcelUtils实现 设置内容 插入行 复制行列格式

ExcelUtils实现&#xff1a;1.实现输入 例如 2 A 的excel格式&#xff0c;自动填充对应excel单元格&#xff1b;2.实现复制并新增下一行&#xff1b;3.实现控制复制上一行相同列的格式&#xff1b;4.实现控制复制同一行上一列的格式&#xff1b;/*** 在指定行下方插入新行并复…

SQLBot 智能问数、数据洞察逻辑拆解

* 基于 SQLBot v1.0.2* 使用 AI Gateway 抓取模型调用记录SQLBot 通过融入 LLM 能力实现了非常优秀的问数体验&#xff0c;这里记录一下产品中如何引入 AI 能力&#xff0c;顺便探究一下调用大模型的数据安全的问题&#xff08;是否会向模型提供真实数据&#xff09;。结论&…

实现统一门户登录跳转免登录

统一门户所有应用页面&#xff0c;点击跳转对应业务系统&#xff0c;实现业务系统免登录//获取所有业务系统项&#xff08;获取并存储到仓库) //用于页面展示 let appSubjectVoList ref<any>([]) appSubjectVoList.value userStore.getAppSubjectVoList || [] //登陆后…

卓伊凡的开源战略与PHP-SG16加密技术深度解析-sg加密技术详解-卓伊凡

卓伊凡的开源战略与PHP-SG16加密技术深度解析-sg加密技术详解-卓伊凡引言&#xff1a;在理想与现实间寻求平衡的开源之路近日&#xff0c;技术创业者卓伊凡先生宣布了一项重大决策&#xff1a;将于明日将其公司旗下的优雅草商城、项目管理系统等众多成熟商业产品正式开源。这一…

回溯 算法常见面试问题

1. 全排列(无重复元素) 核心思想:交换法避免额外空间 def permute(nums):def backtrack(first=0):if first == len(nums):res.append(nums.copy())returnfor i in range(first, len(nums)):nums[first], nums[i] = nums[i], nums[first]backtrack(first + 1)nums[first], …

营销专业人员核心能力构建与发展路径

CDA数据分析师证书含金量高&#xff0c;适应了未来数字化经济和AI发展趋势&#xff0c;难度不高&#xff0c;行业认可度高&#xff0c;对于找工作很有帮助。一、营销人员五维能力模型能力维度核心技能要素工具与方法论产出成果数据驱动决策指标监控、归因分析、效果优化Google …

Android系统学习2——Android.Utils.Log模块讨论

Android系统学习2——Android.Utils.Log模块讨论 ​ 打日志是一个很好的习惯&#xff0c;有的时候我们可以通过这里排查我们的程序的问题。在这里&#xff0c;我们可以从Android的日志机制入手讨论我们的Log模块。 android.util.Log 类的作用 Android 中最常用的日志工具是 and…

使用 YAML 文件,如何优雅地删除 k8s 资源?

在 Kubernetes 中&#xff0c;删除资源是日常运维中不可避免的操作。如果你习惯了使用 kubectl create 和 kubectl apply 来创建和更新资源&#xff0c;那么你可能也会想知道如何用同样基于文件的方式来删除它们。 虽然你总是可以用 kubectl delete deployment <name> 这…

如何将游戏和软件移动到另一个驱动器或外部磁盘中

您的C盘存储空间是否不足&#xff0c;或者您不小心在错误的驱动器中安装了游戏或应用程序。那么使用这个简单的技巧&#xff0c;您可以轻松的将游戏或应用程序移动到另一个分区或磁盘中。1、找到准备移动的软件&#xff0c;选择路径并复制&#xff1a;2、打开记事本&#xff0c…

赋能汽车电子智造:全星QMS打造品质检验、稽核与客诉管理闭环​——全星质量管理软件系统

全星QMS&#xff1a;驱动汽车电子质量卓越与商业成功的核心引擎 在智能汽车时代&#xff0c;汽车电子的质量已成为产品安全、性能与品牌信誉的核心。面对复杂的供应链、严苛的IATF 16949/ISO 26262标准及降本增效的压力&#xff0c;您的企业需要一位数字化战略伙伴。全星质量管…

【数据结构C语言】顺序表

1. 线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线…

AI 学习路径-记录分享

目录推荐学习资源延申阅读推荐学习资源 3Blue1Brown的个人空间-3Blue1Brown个人主页-哔哩哔哩视频 这个简短的课程有助于了解AI的本质&#xff0c;迈入学习AI的第一步。 欢迎加入 &#x1f917; AI Agents 课程 - Hugging Face Agents Course AI Agent&#xff0c;当前火爆…