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

基于高光谱数据集的创新点实现-高斯核函数卷积神经网络

一、高光谱数据集简介

1.1 数据集简介

数据集链接在这:高光谱数据集(.mat.csv)-科研学术
数据集包含下面三个文件:
在这里插入图片描述
文件中包含.mat与.csv,145x145x220,
其实主要使用avirissub.csv文件,在代码上只是将mat文件转成了csv文件。具体avirissub.csv如下:145x145x220,每行代表一个数据,每行前220列代表特征,最后一列代表标签值,共17类标签。
在这里插入图片描述

1.2.软件环境与配置:

安装TensorFlow2.12.0版本。指令如下:

 pip install tensorflow==2.12.0

这个版本最关键,其他库,以此安装即可。

二、基线模型实现:

该代码旨在通过构建和训练卷积神经网络(CNN)模型来进行分类任务。下面是代码的详细解释和网络模型结构的说明:

2.1. 环境设置和数据加载

import pandas as pd
from tensorflow import keras
from tensorflow.keras.layers import Dense, Dropout, Conv1D, MaxPooling1D, Flatten
from tensorflow.keras.models import Sequential
from tensorflow.keras import optimizers
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau
from keras.utils import np_utils
import scipy.io as sio
import osos.environ["CUDA_VISIBLE_DEVICES"] = "0"
np.random.seed(42)num_epoch = []
result_mean = []
result_std_y = []
result_std_w = []
  • 引入所需库,包括Pandas、TensorFlow、Keras、Scipy等。
  • 设置环境变量以使用指定的GPU设备。
  • 设置随机种子以确保结果可重现。

2.2. 数据加载和预处理

data = sio.loadmat('D:/python_test/data/avirissub.mat')
data_L = sio.loadmat('D:/python_test/data/avirissub_gt.mat')print(sio.whosmat('D:/python_test/data/avirissub.mat'))
print(sio.whosmat('D:/python_test/data/avirissub_gt.mat'))data_D = data['x92AV3C']
data_L = data_L['x92AV3C_gt']data_D_flat = data_D.reshape(-1, data_D.shape[-1])
print(data_D_flat.shape)data_combined = pd.DataFrame(data_D_flat)
data_combined['label'] = data_L.flatten()
data_combined.to_csv('D:/python_test/data/avirissub.csv', index=False, header=False)data = pd.read_csv('D:/python_test/data/avirissub.csv', header=None)
data = data.values
data_D = data[:, :-1]
data_L = data[:, -1]
print(data_D.shape)data_D = data_D / np.max(np.max(data_D))
data_D_F = data_D / np.max(np.max(data_D))data_train, data_test, label_train, label_test = train_test_split(data_D_F, data_L, test_size=0.8, random_state=42, stratify=data_L)data_train = data_train.reshape(data_train.shape[0], data_train.shape[1], 1)
data_test = data_test.reshape(data_test.shape[0], data_test.shape[1], 1)print(np.unique(label_train))label_train = np_utils.to_categorical(label_train,  None)
label_test = np_utils.to_categorical(label_test,  None)
  • 加载数据和标签,查看文件中的键和形状。
  • 数据预处理:将多维数据展平成二维数组,合并数据和标签,保存为CSV文件,并从CSV文件中读取数据。
  • 对特征数据进行归一化。
  • 划分训练集和测试集,并调整数据形状以与Conv1D层兼容。
  • 对标签数据进行独热编码。

2.3. 定义卷积神经网络模型

def CNN(num):result = []num_epoch.append(num)for i in range(3):time_S = time.time()model = Sequential()model.add(Conv1D(filters=6, kernel_size=8, input_shape=inputShape, activation='relu', name='spec_conv1'))model.add(MaxPooling1D(pool_size=2, name='spec_pool1'))model.add(Conv1D(filters=12, kernel_size=7, activation='relu', name='spec_conv2'))model.add(MaxPooling1D(pool_size=2, name='spec_pool2'))model.add(Conv1D(filters=24, kernel_size=8, activation='relu', name='spec_conv3'))model.add(MaxPooling1D(pool_size=2, name='spec_pool3'))model.add(Flatten(name='spe_fla'))model.add(Dense(256, activation='relu', name='spe_De'))model.add(Dense(17, activation='softmax'))adam = optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-8)model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy'])filepath = "../model/model_spe(5%).h5"checkpointer = ModelCheckpoint(filepath, monitor='val_acc', save_weights_only=False, mode='max', save_best_only=True, verbose=0)callback = [checkpointer]reduce_lr = ReduceLROnPlateau(monitor='val_acc', factor=0.9, patience=10, verbose=0, mode='auto', epsilon=0.000001, cooldown=0, min_lr=0)history = model.fit(data_train, label_train, epochs=num, batch_size=5, shuffle=True, validation_split=0.1, verbose=0)scores = model.evaluate(data_test, label_test, verbose=0)print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1] * 100))result.append(scores[1] * 100)time_E = time.time()print("costTime:", time_E - time_S, 's')print(result)result_mean.append(np.mean(result))print("均值是:%.4f" % np.mean(result))result_std_y.append(np.std(result))print("标准差(有偏)是:%.4f" % np.std(result))result_std_w.append(np.std(result, ddof=1))print("标准差(无偏)是:%.4f" % np.std(result, ddof=1))
  • 定义CNN函数,构建并训练卷积神经网络模型。
  • 网络模型结构包括:
    • Conv1D 层:一维卷积层,用于提取特征。共三个卷积层,每层有不同的过滤器数量和卷积核大小。
    • MaxPooling1D 层:最大池化层,用于下采样。每个卷积层后都有一个池化层。
    • Flatten 层:将多维特征图展平成一维。
    • Dense 层:全连接层,包含256个神经元,激活函数为ReLU。
    • 最后一层 Dense 层:输出层,包含17个神经元,对应17个类别,激活函数为Softmax。

2.4. 模型训练和评估

if __name__ == '__main__':CNN(5)
  • 调用CNN函数并设置迭代次数为5。

完整的基线模型版本代码如下

from __future__ import print_function
import pandas as pd
from tensorflow import keras
from tensorflow.keras.layers import Dense, Dropout, Conv1D, MaxPooling1D, Flatten
from tensorflow.keras.models import Sequential
from tensorflow.keras import optimizers
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau
from keras.utils import np_utils
import scipy.io as sio
import os# 设置环境变量,指定使用的 GPU 设备
os.environ["CUDA_VISIBLE_DEVICES"] = "0"# 设置随机种子以便实验结果可重现
np.random.seed(42)# 初始化存储结果的列表
num_epoch = []
result_mean = []
result_std_y = []
result_std_w = []# 加载数据
data = sio.loadmat('D:/python_test/data/avirissub.mat')  # 加载数据
data_L = sio.loadmat('D:/python_test/data/avirissub_gt.mat')  # 加载标签# 查看.mat文件中包含的键和它们的形状
print(sio.whosmat('D:/python_test/data/avirissub.mat'))
print(sio.whosmat('D:/python_test/data/avirissub_gt.mat'))# 提取数据和标签
data_D = data['x92AV3C']
data_L = data_L['x92AV3C_gt']# 将多维数据展平成二维数组
data_D_flat = data_D.reshape(-1, data_D.shape[-1])
print(data_D_flat.shape)
# 将数据和标签合并
data_combined = pd.DataFrame(data_D_flat)
data_combined['label'] = data_L.flatten()# 保存为.csv文件
data_combined.to_csv('D:/python_test/data/avirissub.csv', index=False, header=False)# 从 CSV 文件中读取数据
data = pd.read_csv('D:/python_test/data/avirissub.csv', header=None)  # 14 类可以用于分类
data = data.values
data_D = data[:, :-1]  # 提取特征 提取了 data 矩阵的所有行和除了最后一列之外的所有列,这就是特征数据。
data_L = data[:, -1]  # 提取标签 提取了 data 矩阵的所有行的最后一列,这就是标签数据
print(data_D.shape)  # 打印特征数据的形状# 对特征数据进行归一化
data_D = data_D / np.max(np.max(data_D))
data_D_F = data_D / np.max(np.max(data_D))# 将数据划分为训练集和测试集
data_train, data_test, label_train, label_test = train_test_split(data_D_F, data_L, test_size=0.8, random_state=42,stratify=data_L)
# 将数据重新调整为与 Conv1D 层兼容的形状
data_train = data_train.reshape(data_train.shape[0], data_train.shape[1], 1)
data_test = data_test.reshape(data_test.shape[0], data_test.shape[1], 1)# 打印标签数据的唯一值,确保它们的范围是正确的
print(np.unique(label_train))# 根据类来自动定义独热编码
label_train = np_utils.to_categorical(label_train,  None)
label_test = np_utils.to_categorical(label_test,  None)inputShape = data_train[0].shape  # 输入形状import timedef CNN(num):result = []num_epoch.append(num)# for i in range(50):for i in range(3):time_S = time.time()model = Sequential()# 定义模型结构model.add(Conv1D(filters=6, kernel_size=8, input_shape=inputShape, activation='relu', name='spec_conv1'))model.add(MaxPooling1D(pool_size=2, name='spec_pool1'))#model.add(Conv1D(filters=12, kernel_size=7, activation='relu', name='spec_conv2'))model.add(MaxPooling1D(pool_size=2, name='spec_pool2'))#model.add(Conv1D(filters=24, kernel_size=8, activation='relu', name='spec_conv3'))model.add(MaxPooling1D(pool_size=2, name='spec_pool3'))# model.add(Conv1D(filters=48, kernel_size=10, activation='relu', name='spec_conv4'))# model.add(MaxPooling1D(pool_size=2, name='spec_pool4'))model.add(Flatten(name='spe_fla'))model.add(Dense(256, activation='relu', name='spe_De'))# model.add(Dropout(0.5,name = 'drop'))model.add(Dense(17, activation='softmax'))# 设置优化器和损失函数,并编译模型adam = optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-8)model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy'])filepath = "../model/model_spe(5%).h5"checkpointer = ModelCheckpoint(filepath, monitor='val_acc', save_weights_only=False, mode='max',save_best_only=True, verbose=0)callback = [checkpointer]reduce_lr = ReduceLROnPlateau(monitor='val_acc', factor=0.9, patience=10, verbose=0, mode='auto',epsilon=0.000001,cooldown=0, min_lr=0)# 训练模型并计算评分history = model.fit(data_train, label_train, epochs=num, batch_size=5, shuffle=True, validation_split=0.1,verbose=0)scores = model.evaluate(data_test, label_test, verbose=0)print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1] * 100))# 保存模型result.append(scores[1] * 100)time_E = time.time()print("costTime:", time_E - time_S, 's')print(result)result_mean.append(np.mean(result))print("均值是:%.4f" % np.mean(result))result_std_y.append(np.std(result))print("标准差(有偏)是:%.4f" % np.std(result))result_std_w.append(np.std(result, ddof=1))print("标准差(无偏)是:%.4f" % np.std(result, ddof=1))if __name__ == '__main__':# 调用 CNN 函数并设置迭代次数为 50# CNN(50)CNN(5)

三、创新点实现:

这段代码在原有基础上引入了一些创新点,主要包括自定义卷积层和自定义回调函数。下面是具体创新点的详细解释:

3.1. 高斯核函数和自定义卷积层

高斯核函数
def gaussian_kernel(x, y, sigma=1.0):return tf.exp(-tf.reduce_sum(tf.square(x - y), axis=-1) / (2 * sigma ** 2))
  • 定义高斯核函数,用于计算输入片段与卷积核之间的相似性。
自定义卷积层
class GaussianKernelConv1D(Layer):def __init__(self, filters, kernel_size, sigma=1.0, **kwargs):super(GaussianKernelConv1D, self).__init__(**kwargs)self.filters = filtersself.kernel_size = kernel_sizeself.sigma = sigmadef build(self, input_shape):self.kernel = self.add_weight(name='kernel',shape=(self.kernel_size, int(input_shape[-1]), self.filters),initializer='uniform',trainable=True)super(GaussianKernelConv1D, self).build(input_shape)def call(self, inputs):output = []for i in range(inputs.shape[1] - self.kernel_size + 1):slice = inputs[:, i:i+self.kernel_size, :]slice = tf.expand_dims(slice, -1)kernel = tf.expand_dims(self.kernel, 0)similarity = gaussian_kernel(slice, kernel, self.sigma)output.append(tf.reduce_sum(similarity, axis=2))return tf.stack(output, axis=1)
  • GaussianKernelConv1D 是一个自定义的一维卷积层,使用高斯核函数来计算相似性。
  • build 方法中定义了卷积核,并设置为可训练参数。
  • call 方法中实现了卷积操作,通过滑动窗口方式计算输入片段和卷积核之间的相似性,并累加这些相似性值。

3.2. 自定义回调函数

自定义回调函数用于在每个 epoch 结束时输出训练信息
class TrainingProgressCallback(Callback):def on_epoch_end(self, epoch, logs=None):logs = logs or {}print(f"Epoch {epoch + 1}/{self.params['epochs']}, Loss: {logs.get('loss')}, Accuracy: {logs.get('accuracy')}, "f"Val Loss: {logs.get('val_loss')}, Val Accuracy: {logs.get('val_accuracy')}")
  • TrainingProgressCallback 是一个自定义回调函数,用于在每个 epoch 结束时输出训练进度,包括损失和准确率。

3.3. 模型构建、训练和评估

CNN 函数
def CNN(num):result = []num_epoch.append(num)for i in range(3):time_S = time.time()model = Sequential()# 定义模型结构model.add(GaussianKernelConv1D(filters=6, kernel_size=8, input_shape=inputShape, name='spec_conv1'))model.add(MaxPooling1D(pool_size=2, name='spec_pool1'))model.add(GaussianKernelConv1D(filters=12, kernel_size=7, name='spec_conv2'))model.add(MaxPooling1D(pool_size=2, name='spec_pool2'))model.add(GaussianKernelConv1D(filters=24, kernel_size=8, name='spec_conv3'))model.add(MaxPooling1D(pool_size=2, name='spec_pool3'))model.add(Flatten(name='spe_fla'))model.add(Dense(256, activation='relu', name='spe_De'))model.add(Dense(17, activation='softmax'))# 设置优化器和损失函数,并编译模型adam = optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-8)model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy'])filepath = "../model/model_spe(5%).h5"checkpointer = ModelCheckpoint(filepath, monitor='val_accuracy', save_weights_only=False, mode='max',save_best_only=True, verbose=0)callback = [checkpointer, TrainingProgressCallback()]reduce_lr = ReduceLROnPlateau(monitor='val_accuracy', factor=0.9, patience=10, verbose=0, mode='auto',min_delta=0.000001,cooldown=0, min_lr=0)callback.append(reduce_lr)# 训练模型并计算评分history = model.fit(data_train, label_train, epochs=num, batch_size=5, shuffle=True, validation_split=0.1,verbose=1, callbacks=callback)scores = model.evaluate(data_test, label_test, verbose=0)print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1] * 100))result.append(scores[1] * 100)time_E = time.time()print("costTime:", time_E - time_S, 's')print(result)result_mean.append(np.mean(result))print("均值是:%.4f" % np.mean(result))result_std_y.append(np.std(result))print("标准差(有偏)是:%.4f" % np.std(result))result_std_w.append(np.std(result, ddof=1))print("标准差(无偏)是:%.4f" % np.std(result, ddof=1))
  • CNN 函数中,模型结构与之前类似,但卷积层替换为自定义的 GaussianKernelConv1D 层。
  • 使用 TrainingProgressCallback 在每个 epoch 结束时输出训练进度。
  • 训练模型并评估其性能。

四、总结

相对于原代码,新的代码主要创新点包括:

  1. 引入高斯核函数和自定义卷积层:使用高斯核函数来计算输入片段与卷积核之间的相似性,增加了模型的灵活性和非线性特征提取能力。
  2. 自定义回调函数:用于在每个 epoch 结束时输出训练进度,提供更详细的训练信息,便于实时监控和调整模型。

相关文章:

基于高光谱数据集的创新点实现-高斯核函数卷积神经网络

一、高光谱数据集简介 1.1 数据集简介 数据集链接在这:高光谱数据集(.mat.csv)-科研学术 数据集包含下面三个文件: 文件中包含.mat与.csv,145x145x220, 其实主要使用avirissub.csv文件,在代码上只是将mat文件转成了csv文件。具体avirissub.csv如下&am…...

【python 进阶】 绘图

1. 将多个柱状绘制在一个图中 import seaborn as sns import matplotlib.pyplot as plt import numpy as np import pandas as pd# 创建示例数据 categories [A, B, C, D, E] values1 np.random.randint(1, 10, sizelen(categories)) values2 np.random.randint(1, 10, siz…...

memblock_free_all释放page到buddy,前后nr_free的情况

https://www.cnblogs.com/tolimit/p/5287801.html 在zone_sizes_init 之后,各个node,zone的page总数已知。但是此时的每个order的空闲链表是空的,也就是无法通过alloc_page这种接口来分配。此时page还在memblock管控,需要memblock…...

Django实现websocket

Django实现websocket WebSocket功能使用介绍安装配置WebSocket接口--消息接收者的实现scope通道层 channel layer部署Web客户端连接Mac客户端 WebSocket功能 WebSocket长连接一般用于实现实时功能,例如web端的消息通知、会话等场景。 使用 WebSocket 向 Django 项…...

先进制造aps专题九 中国aps行业分析

国外aps的问题是不给国内客户定制算法 国外aps的算法都很强大,考虑几百个约束条件,各种复杂的工序关系,还有副资源约束特殊规格约束,排程还优化,光c写的算法代码就几十万行甚至上百万行 国内aps的问题是实现不了复杂的…...

力扣hot100:23. 合并 K 个升序链表

23. 合并 K 个升序链表 这题非常容易想到归并排序的思路,俩升序序列合并,可以使用归并的方法。 不过这里显然是一个多路归并排序;包含多个子数组的归并算法,这可以让我们拓展归并算法的思路。 假设n是序列个数,ni是…...

Lightweight Robust Size Aware Cache Management——论文泛读

TOC 2022 Paper 论文阅读笔记整理 问题 现代键值存储、对象存储、互联网代理缓存和内容交付网络(CDN)通常管理不同大小的对象,例如,Blob、不同长度的视频文件、不同分辨率的图像和小文件。在这种工作负载中,大小感知…...

搜索自动补全-elasticsearch实现

1. elasticsearch准备 1.1 拼音分词器 github地址:https://github.com/infinilabs/analysis-pinyin/releases?page6 必须与elasticsearch的版本相同 第四步,重启es docker restart es1.2 定义索引库 PUT /app_info_article {"settings": …...

连接远程的kafka【linux】

# 连接远程的kafka【linux】 前言版权推荐连接远程的kafka【linux】一、开放防火墙端口二、本地测试是否能访问端口三、远程kafka配置四、开启远程kakfa五、本地测试能否连接远程六、SpringBoot测试连接 遇到的问题最后 前言 2024-5-14 18:45:48 以下内容源自《【linux】》 仅…...

简单的 Cython 示例

1&#xff0c; pyx文件 fibonacci.pyx def fibonacci_old(n):if n < 0:return 0elif n 1:return 1else:return fibonacci_old(n-1) fibonacci_old(n-2) 2&#xff0c;setup.py setup.py from setuptools import setup from Cython.Build import cythonizesetup(ext_mod…...

Laravel时间处理类Carbon

时间和日期处理是非常常见的任务。Carbon 是一个功能强大的 PHP 扩展包&#xff0c;它为我们提供了许多方便的方法来处理日期和时间。在 Laravel 中&#xff0c;你无需单独安装 Carbon&#xff0c;因为 Laravel 默认已经包含了它。如果你正在使用 Laravel&#xff0c;那么你已经…...

2024年5月软考架构题目回忆分享

十年架构两茫茫 &#xff0c;Redis , UML 夜来幽梦忽还乡 &#xff0c; 大数据&#xff0c; Lambda 选择题 1.需求分析和架构设计面临这两个不同对象&#xff0c;一个是问题空间&#xff0c;一个是解空间 这是英文题&#xff0c;总共五个题目&#xff0c;只记得这么多 2. …...

香橙派 AIpro开发板初上手

一、香橙派 AIpro开箱 最近拿到了香橙派 AIpro&#xff08;OrangePi AIpro&#xff09;&#xff0c;下面就是里面的板子和相关的配件。包含主板、散热组件、电源适配器、双C口电源线、32GB SD卡。我手上的这个是8G LPDDR4X运存的版本。 OrangePi AIpro开发板是一款由香橙派与华…...

如何使用DotNet-MetaData识别.NET恶意软件源码文件元数据

关于DotNet-MetaData DotNet-MetaData是一款针对.NET恶意软件的安全分析工具&#xff0c;该工具专为蓝队研究人员设计&#xff0c;可以帮助广大研究人员轻松识别.NET恶意软件二进制源代码文件中的元数据。 工具架构 当前版本的DotNet-MetaData主要由以下两个部分组成&#xf…...

LeetCode---栈与队列

232. 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int pee…...

【教程】利用API接口添加本站同款【每日新闻早早报】-每天自动更新,不占用文章数量

本次分享的是给网站添加一个每日早报的文章&#xff0c;可以看到本站置顶上面还有一个日更的日报&#xff0c;这是利用ALAPI的接口完成的&#xff01;利用接口有利也有弊&#xff0c;因为每次用户访问网站的时候就会增加一次API接口请求&#xff0c;导致文章的请求会因为请求量…...

僵尸进程,孤儿进程,守护进程

【一】僵尸进程 1.僵尸进程是指完成自己的任务之后&#xff0c;没有被父进程回收资源,占用系统资源,对计算机有害&#xff0c;应该避免 """ 所有的子进程在运行结束之后都会变成僵尸进程(死了没死透)还保留着pid和一些运行过程的中的记录便于主进程查看(短时间…...

Nuxt3 中使用 ESLint

# 快速安装 使用该命令安装的同时会给依赖、内置模块同时更新 npx nuxi module add eslint安装完毕后&#xff0c;nuxt.config.ts 文件 和 package.json 文件 会新增代码段&#xff1a; # nuxt.config.ts modules: ["nuxt/eslint" ] # package.json "devDep…...

【Jmeter】性能测试之压测脚本生成,也可以录制接口自动化测试场景

准备工作-10分中药录制HTTPS脚本&#xff0c;需配置证书 准备工作-10分中药 以https://www.baidu.com/这个地址为录制脚本的示例。 录制脚本前的准备工作当然是得先把Jmeter下载安装好、JDK环境配置好、打开Jmeter.bat&#xff0c;打开cmd&#xff0c;输入ipconfig&#xff0c;…...

Go 编程技巧:零拷贝字符串与切片转换的高效秘籍

前言 ​ 在深入探讨Go语言中字符串与切片类型转换的高效方法之前&#xff0c;让我们先思考一个关键问题&#xff1a;如何在不进行内存拷贝的情况下&#xff0c;实现这两种数据类型之间的无缝转换&#xff1f;本文将详细解析Go语言中字符串&#xff08;字符类型&#xff09;和切…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...