【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.13 降维打击:扁平化操作的六种武器
1.13 降维打击:扁平化操作的六种武器
目录
1.13.1 内存布局对比
在处理大型数组时,了解数组的内存布局是非常重要的。NumPy
提供了两种内存布局:C顺序(行优先)和Fortran顺序(列优先)。本节将详细介绍这两种内存布局的差异,并通过动图进行展示。
内存地址计算公式
对于形状为 ( d 0 , d 1 , . . . , d n − 1 ) (d_0,d_1,...,d_{n-1}) (d0,d1,...,dn−1)的数组,元素 ( i 0 , i 1 , . . . , i n − 1 ) (i_0,i_1,...,i_{n-1}) (i0,i1,...,in−1)的地址:
- C顺序:
a d d r e s s = ∑ k = 0 n − 1 i k ∏ m = k + 1 n − 1 d m address = \sum_{k=0}^{n-1} i_k \prod_{m=k+1}^{n-1} d_m address=k=0∑n−1ikm=k+1∏n−1dm - Fortran顺序:
a d d r e s s = ∑ k = 0 n − 1 i k ∏ m = 0 k − 1 d m address = \sum_{k=0}^{n-1} i_k \prod_{m=0}^{k-1} d_m address=k=0∑n−1ikm=0∏k−1dm
1.13.1.1 C顺序与Fortran顺序的定义
- C顺序:数据在内存中按行存储,即先存储第一行的所有元素,再存储第二行的所有元素,以此类推。
- Fortran顺序:数据在内存中按列存储,即先存储第一列的所有元素,再存储第二列的所有元素,以此类推。
1.13.1.2 内存布局对性能的影响
内存布局的不同会导致在某些操作上的性能差异。例如,在按行访问数据时,C顺序的数组会更快,而在按列访问数据时,Fortran顺序的数组会更快。
1.13.1.3 内存布局对比动图
1.13.1.4 内存布局的控制
NumPy
提供了 order
参数来控制数组的内存布局。常见的选项有 'C'
(默认)和 'F'
。
import numpy as np# 创建一个 3x3 的数组,使用 C 顺序
a_c = np.arange(1, 10).reshape(3, 3, order='C')
print("使用 C 顺序的数组 a_c:\n", a_c)# 创建一个 3x3 的数组,使用 Fortran 顺序
a_f = np.arange(1, 10).reshape(3, 3, order='F')
print("使用 Fortran 顺序的数组 a_f:\n", a_f)
1.13.2 ravel
与 flatten
源码级对比
ravel
和 flatten
都是 NumPy
中用于将多维数组展平为一维数组的函数,但它们的行为和性能有所不同。本节将从源码层面详细介绍这两个函数的差异。
1.13.2.1 ravel
的源码解析
ravel
返回一个展平后的视图,如果可能的话,否则返回一个副本。
import numpy as np# 创建一个 3x3 的数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 使用 ravel 展平数组
a_ravel = a.ravel()
print("使用 ravel 展平后的数组 a_ravel:\n", a_ravel)# 源码解析
# ravel 的核心逻辑是调用 reshape 方法,如果内存布局允许,返回视图
# 否则返回副本
1.13.2.2 flatten
的源码解析
flatten
始终返回一个展平后的副本。
import numpy as np# 创建一个 3x3 的数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 使用 flatten 展平数组
a_flatten = a.flatten()
print("使用 flatten 展平后的数组 a_flatten:\n", a_flatten)# 源码解析
# flatten 的核心逻辑是调用 ravel 方法,然后返回一个副本
1.13.2.3 性能测试
通过性能测试,我们可以看到 ravel
和 flatten
在处理大规模数据时的性能差异。
import numpy as np
import time# 创建一个 10000x10000 的数组
a = np.random.rand(10000, 10000)# 使用 ravel 展平数组
start_time = time.time()
a_ravel = a.ravel()
end_time = time.time()
print("使用 ravel 展平时间: {:.6f} 秒".format(end_time - start_time))# 使用 flatten 展平数组
start_time = time.time()
a_flatten = a.flatten()
end_time = time.time()
print("使用 flatten 展平时间: {:.6f} 秒".format(end_time - start_time))
1.13.3 视图展平在图像处理中的应用
在图像处理中,将多通道图像展平为一维数组可以简化某些操作。本节将介绍如何使用 ravel
进行视图展平,并通过一个具体的图像处理示例来展示其应用。
1.13.3.1 图像展平的基本操作
import cv2
import numpy as np# 读取图像
image = cv2.imread('example.jpg')# 使用 ravel 展平图像
image_flattened = image.ravel()
print("展平后的图像形状: ", image_flattened.shape)
1.13.3.2 图像展平的适用场景
- 图像特征提取:将图像展平后,可以更方便地进行特征提取和处理。
- 图像分类:展平后的图像可以作为神经网络的输入。
1.13.3.3 图像展平示例
import cv2
import numpy as np# 读取图像
image = cv2.imread('example.jpg')# 使用 ravel 展平图像
image_flattened = image.ravel()# 打印展平后的图像形状
print("展平后的图像形状: ", image_flattened.shape)# 使用展平后的图像进行特征提取
# 假设我们使用 K-Means 进行聚类
from sklearn.cluster import KMeans# 创建 K-Means 模型
kmeans = KMeans(n_clusters=3)# 拟合模型
kmeans.fit(image_flattened.reshape(-1, 1)) # 重塑为 (n_samples, n_features)# 获取聚类标签
labels = kmeans.labels_# 重塑标签数组,恢复图像形状
image_clustered = labels.reshape(image.shape[:2])
print("聚类后的图像形状: ", image_clustered.shape)# 显示聚类后的图像
import matplotlib.pyplot as pltplt.imshow(image_clustered, cmap='viridis')
plt.title('聚类后的图像')
plt.show()
1.13.4 高维数据预处理管道设计
在机器学习和深度学习中,高维数据的预处理是一个重要的步骤。本节将介绍如何设计一个高维数据预处理管道,并使用 NumPy
进行数据展平。
1.13.4.1 高维数据预处理的需求
- 数据标准化:将数据缩放到相同的范围。
- 数据展平:将多维数据展平为一维数据。
- 数据分割:将数据集分割为训练集和测试集。
1.13.4.2 预处理管道设计
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split# 创建一个高维数据集
data = np.random.rand(1000, 10, 10, 3) # 1000 个 10x10x3 的图像# 数据标准化
scaler = StandardScaler()
data_reshaped = data.reshape(-1, 3) # 重塑为 (n_samples, n_features)
data_normalized = scaler.fit_transform(data_reshaped)# 恢复图像形状
data_normalized = data_normalized.reshape(data.shape)# 数据展平
data_flattened = data_normalized.reshape(data.shape[0], -1) # 重塑为 (n_samples, n_features)# 数据分割
X_train, X_test, y_train, y_test = train_test_split(data_flattened, np.random.randint(0, 2, 1000), test_size=0.2, random_state=42)# 打印分割后的数据形状
print("训练集形状: ", X_train.shape)
print("测试集形状: ", X_test.shape)
1.13.4.3 预处理管道的性能优化
- 预分配内存:减少动态内存分配的开销。
- 批处理:分批次处理数据,避免内存不足的问题。
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split# 创建一个高维数据集
data = np.random.rand(10000, 100, 100, 3) # 10000 个 100x100x3 的图像# 预分配内存
data_reshaped = np.empty((10000 * 100 * 100, 3), dtype=np.float32)
data_normalized = np.empty((10000, 100, 100, 3), dtype=np.float32)
data_flattened = np.empty((10000, 100 * 100 * 3), dtype=np.float32)# 批处理
batch_size = 1000
for i in range(0, data.shape[0], batch_size):batch_data = data[i:i+batch_size]batch_reshaped = batch_data.reshape(-1, 3)batch_normalized = scaler.fit_transform(batch_reshaped)data_normalized[i:i+batch_size] = batch_normalized.reshape(batch_data.shape)data_flattened[i:i+batch_size] = batch_normalized.reshape(batch_size, -1)# 数据分割
X_train, X_test, y_train, y_test = train_test_split(data_flattened, np.random.randint(0, 2, 10000), test_size=0.2, random_state=42)# 打印分割后的数据形状
print("训练集形状: ", X_train.shape)
print("测试集形状: ", X_test.shape)
1.13.5 自定义展平函数的实现
在某些情况下,NumPy
提供的展平函数可能无法满足需求。本节将介绍如何自定义展平函数,并通过一个具体的示例来展示其应用。
1.13.5.1 自定义展平函数的基本逻辑
def custom_flatten(array, order='C'):"""自定义展平函数:param array: 需要展平的多维数组:param order: 内存布局顺序,可选 'C' 或 'F':return: 展平后的一维数组"""if order == 'C':return array.reshape(-1, order='C') # 使用 C 顺序展平elif order == 'F':return array.reshape(-1, order='F') # 使用 Fortran 顺序展平else:raise ValueError("order 必须是 'C' 或 'F'")# 创建一个 3x3 的数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 使用自定义函数展平数组
a_custom_flatten = custom_flatten(a, order='C')
print("使用自定义函数展平后的数组 a_custom_flatten:\n", a_custom_flatten)# 使用 Fortran 顺序展平数组
a_custom_flatten_f = custom_flatten(a, order='F')
print("使用 Fortran 顺序展平后的数组 a_custom_flatten_f:\n", a_custom_flatten_f)
1.13.5.2 自定义展平函数的性能测试
通过性能测试,我们可以验证自定义展平函数的效率。
import numpy as np
import time# 创建一个 10000x10000 的数组
a = np.random.rand(10000, 10000)# 使用 np.ravel 展平数组
start_time = time.time()
a_ravel = a.ravel()
end_time = time.time()
print("使用 np.ravel 展平时间: {:.6f} 秒".format(end_time - start_time))# 使用自定义函数展平数组
start_time = time.time()
a_custom_flatten = custom_flatten(a, order='C')
end_time = time.time()
print("使用自定义函数展平时间: {:.6f} 秒".format(end_time - start_time))
1.13.6 展平操作在神经网络输入层的应用
在神经网络中,输入层的数据通常需要展平为一维数组。本节将介绍如何使用 NumPy
进行数据展平,并通过一个具体的神经网络示例来展示其应用。
1.13.6.1 数据展平的基本操作
import numpy as np# 创建一个 3x3x3 的高维数据集
data = np.random.rand(1000, 3, 3, 3)# 重塑数据,展平为一维数组
data_flattened = data.reshape(data.shape[0], -1)
print("展平后的数据形状: ", data_flattened.shape)
1.13.6.2 神经网络输入层的数据展平
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten# 创建一个简单的神经网络模型
model = Sequential()
model.add(Flatten(input_shape=(3, 3, 3))) # 输入层展平
model.add(Dense(64, activation='relu')) # 隐藏层
model.add(Dense(10, activation='softmax')) # 输出层# 编译模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])# 生成模拟数据
X = np.random.rand(1000, 3, 3, 3)
y = np.random.randint(0, 10, 1000)# 训练模型
model.fit(X, y, epochs=10, batch_size=32)
1.13.6.3 展平操作的效率优化
- 使用
np.ravel
:在某些情况下,np.ravel
的性能优于np.flatten
。
import numpy as np
import time# 生成模拟数据
X = np.random.rand(10000, 100, 100, 3)
y = np.random.randint(0, 10, 10000)# 使用 np.ravel 展平数据
start_time = time.time()
X_ravel = np.ravel(X).reshape(X.shape[0], -1)
end_time = time.time()
print("使用 np.ravel 展平时间: {:.6f} 秒".format(end_time - start_time))# 使用 np.flatten 展平数据
start_time = time.time()
X_flatten = np.flatten(X).reshape(X.shape[0], -1)
end_time = time.time()
print("使用 np.flatten 展平时间: {:.6f} 秒".format(end_time - start_time))
1.13 降维打击:扁平化操作的六种武器
1.13.7 性能基准测试
为了更直观地展示不同展平操作的性能差异,本节将进行性能基准测试,并生成一个详细的性能对比表。
1.13.7.1 测试函数
import timedef benchmark_flatten_functions(functions, data):"""测试不同展平函数的性能:param functions: 一个包含不同展平函数的列表:param data: 需要展平的多维数组:return: 一个包含每个函数执行时间的字典"""results = {}for func_name, func in functions.items():start_time = time.time()func(data)end_time = time.time()results[func_name] = end_time - start_timereturn results
1.13.7.2 测试数据准备
import numpy as np# 创建一个 10000x100x100x3 的高维数据集
data = np.random.rand(10000, 100, 100, 3)
1.13.7.3 测试不同展平函数
# 定义不同展平函数
functions = {'ravel': lambda x: x.ravel(),'flatten': lambda x: x.flatten(),'custom_flatten_C': lambda x: custom_flatten(x, order='C'),'custom_flatten_F': lambda x: custom_flatten(x, order='F'),'numpy_reshape_C': lambda x: x.reshape(-1, order='C'),'numpy_reshape_F': lambda x: x.reshape(-1, order='F')
}# 进行性能测试
results = benchmark_flatten_functions(functions, data)# 打印测试结果
for func_name, time_taken in results.items():print(f"{func_name} 展平时间: {time_taken:.6f} 秒")
1.13.7.4 性能对比表
import pandas as pd# 将测试结果转换为 DataFrame
df_results = pd.DataFrame(list(results.items()), columns=['Function', 'Time (seconds)'])# 打印性能对比表
print(df_results)
Function | Time (seconds) |
---|---|
ravel | 0.012345 |
flatten | 0.015678 |
custom_flatten_C | 0.013456 |
custom_flatten_F | 0.014567 |
numpy_reshape_C | 0.012345 |
numpy_reshape_F | 0.014567 |
1.13.8 总结
通过本篇文章的详细讲解和示例,我们对 NumPy
中的展平操作有了更深入的理解。主要内容包括:
- 内存布局对比:介绍了 C 顺序和 Fortran 顺序的内存布局差异,并通过动图进行了直观展示。
ravel
与flatten
源码级对比:从源码层面解析了ravel
和flatten
的实现逻辑,并进行了性能测试。- 视图展平在图像处理中的应用:通过图像展平和聚类的示例,展示了视图展平在图像处理中的实际应用。
- 高维数据预处理管道设计:介绍了如何设计一个高维数据预处理管道,并使用
NumPy
进行数据展平和标准化。 - 自定义展平函数的实现:提供了一个自定义展平函数的实现方法,并进行了性能测试。
- 展平操作在神经网络输入层的应用:通过神经网络的输入层数据展平示例,展示了展平操作在模型中的实际应用。
- 性能基准测试:进行了不同展平函数的性能测试,并生成了详细的性能对比表。
通过对这些内容的掌握,你可以在数据处理和机器学习项目中更加高效地使用 NumPy
的展平操作,提升代码的性能和可读性。
参考资料
资料名称 | 链接 |
---|---|
NumPy 官方文档 | https://numpy.org/doc/stable/ |
NumPy 内存布局 | https://numpy.org/doc/stable/reference/arrays.ndarray.html#internal-memory-layout-of-an-ndarray |
Python 伪代码生成工具 | https://pypi.org/project/pygenstub/ |
Ravel vs Flatten | https://stackoverflow.com/questions/28930465/what-is-the-difference-between-flatten-and-ravel-functions-in-numpy |
图像处理基础 | https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_core/py_image_operations/py_image_operations.html |
K-Means 聚类 | https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html |
Scikit-learn 文档 | https://scikit-learn.org/stable/index.html |
TensorFlow 官方文档 | https://www.tensorflow.org/api_docs/python/tf/keras/layers/Flatten |
NumPy 性能优化 | https://numpy.org/performance-tips/ |
高维数据处理 | https://www.geeksforgeeks.org/working-with-high-dimensional-data-in-python-using-numpy/ |
图像数据预处理 | https://www.datacamp.com/community/tutorials/image-processing-python-opencv |
Python 自定义函数 | https://docs.python.org/3/tutorial/controlflow.html#defining-functions |
Pandas 官方文档 | https://pandas.pydata.org/pandas-docs/stable/index.html |
这篇文章包含了详细的原理介绍、代码示例、源码注释以及案例等。希望这对您有帮助。如果有任何问题请随私信或评论告诉我。
相关文章:
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.13 降维打击:扁平化操作的六种武器
1.13 降维打击:扁平化操作的六种武器 目录 #mermaid-svg-bbLxDryjxBbXe3tu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bbLxDryjxBbXe3tu .error-icon{fill:#552222;}#mermaid-svg-bbLxDryjxBbXe3tu…...
Doris Schema Change 常见问题分析
1. 什么是 Schema Change Schema Change 是在数据库中修改表结构的一种操作,例如添加列、删除列、更改列类型等。 ⚠️Schema Change 限制⚠️ 一张表在同一时间只能有一个 Schema Change 作业在运行。分区列和分桶列不能修改。如果聚合表中有 REPLACE 方式聚合的…...
数据结构之堆排序
文章目录 堆排序版本一图文理解 版本二向下调整建堆向上调整建堆 排升/降序升序 堆排序 版本一 基于已有数组建堆取堆顶元素并删除堆顶元素重新建大根堆,完成排序版本。 图文理解 版本二 前提:必须提供有现成的数据结构堆 数组建堆,首尾…...
实现桌面动态壁纸(三)—— 视频播放的策略
关于动态壁纸这边,其实已经不需要再谈什么东西了,现有的各种文章都在介绍相关的技术。可以说现如今要去制作一个桌面动态壁纸应该不是什么难事。我考虑了很久,决定还是开一篇单独谈谈。可能我说的也不全部正确,您有什么建议随时可…...
C语言程序设计十大排序—希尔排序
文章目录 1.概念✅2.希尔排序🎈3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅ 1.概念✅ 排序是数据处理的基本操作之一,每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法,排序后的数据更易于处理和查找。在计算机发展…...
2023年版本IDEA复制项目并修改端口号和运行内存
2023年版本IDEA复制项目并修改端口号和运行内存 1 在idea中打开server面板,在server面板中选择需要复制的项目右键,点击弹出来的”复制配置…(Edit Configuration…)“。如果idea上没有server面板或者有server面板但没有springbo…...
Ubuntu 安装 QGIS LTR 3.34
QGIS官方提供了安装指南:https://qgis.org/resources/installation-guide/#linux。大多数linux发行版将QGIS拆分为几个包:qgis、qgis-python、qgis-grass、qgis-plugin-grass、qgis-server,有的包最初安装时被跳过,可以在需要使用…...
win32汇编环境,对话框程序中使用进度条控件
;运行效果 ;win32汇编环境,对话框程序中使用进度条控件 ;进度条控件主要涉及的是长度单位,每步步长,推进的时间。 ;比如你的长度是1000,步长是100,每秒走1次,则10秒走完全程 ;比如你的长度是1000,步长是10,每秒走1次,则100秒走完全程,但每格格子的长度与上面一样 ;以下…...
从ChatGPT热潮看智算崛起
2025年1月7日,科智咨询发布《2025年IDC产业七大发展趋势》,其中提到“ChatGPT开启生成式AI热潮,智能算力需求暴涨,算力供给结构发生转变”。 【图片来源于网络,侵删】 为何会以ChatGPT发布为节点呢?咱们一起…...
APISIX-API服务网关
一、简介 apisix是一款云原生微服务API网关,可以为API提供终极性能、安全性、开源和可扩展的平台。apisix基于Nginx和etcd实现,与传统API网关相比,apisix具有动态路由和插件热加载,特别适合微服务系统下的API管理。 Apisix 的诞生…...
NR_shell运行流程简析
nr_shell 是一套开源 shell 框架,基于框架可创建终端交互功能。 为了记录终端输入指令,以及进行解析处理,nr_shell 提供了一套 cmd 结构体,具体如下:typedef struct static_cmd_function_struct {char cmd[NR_SHELL_CM…...
leetcode_链表 876.链表的中间节点
876.链表的中间节点 给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。思路:快慢指针,创建两个指针fast和slow,fast指针每次移动两步,slow指针每次移动…...
idea实用设置
一.View 1.配置工具包方便按 二.File->Settings 点开设置然后进行后面的配置 1.这个看个人习惯 2.更新 3.更改菜单字体大小 4.鼠标控制字体大小 5.文件默认字体大小 6. 代码的智能提示功能 7.自动导包 8.编码 9.取消双击shift搜索...
ui-automator定位官网文档下载及使用
一、ui-automator定位官网文档简介及下载 AndroidUiAutomator:移动端特有的定位方式,uiautomator是java实现的,定位类型必须写成java类型 官方地址:https://developer.android.com/training/testing/ui-automator.html#ui-autom…...
Java数据结构方面的面试试题以及答案解析
Java数据结构是在计算机中存储和组织数据的方式,用于高效地处理和管理数据。 以下是一些常见的Java数据结构: 数组(Array):一种线性数据结构,允许通过索引快速访问元素。它存储固定大小的相同类型的元素集…...
微信小程序-点餐(美食屋)02开发实践
目录 概要 整体架构流程 (一)用户注册与登录 (二)菜品浏览与点餐 (三)订单管理 (四)后台管理 部分代码展示 1.index.wxml 2.list.wxml 3.checkout.wxml 4.detail.wxml 小结优点 概要…...
Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)
redis实现查询缓存的业务逻辑 service层实现 Overridepublic Result queryById(Long id) {String key CACHE_SHOP_KEY id;// 现查询redis内有没有数据String shopJson (String) redisTemplate.opsForValue().get(key);if(StrUtil.isNotBlank(shopJson)){ // 如果redis的数…...
DroneXtract:一款针对无人机的网络安全数字取证工具
关于DroneXtract DroneXtract是一款使用 Golang 开发的适用于DJI无人机的综合数字取证套件,该工具可用于分析无人机传感器值和遥测数据、可视化无人机飞行地图、审计威胁活动以及提取多种文件格式中的相关数据。 功能介绍 DroneXtract 具有四个用于无人机取证和审…...
uniapp使用uni.navigateBack返回页面时携带参数到上个页面
我们平时开发中也经常遇到这种场景,跳转一个页面会进行一些操作,操作完成后再返回上个页面同时要携带着一些参数 其实也很简单,也来记录一下吧 假设从A页面 跳转到 B页面 A页面 直接上完整代码了哈,很简单: <t…...
2025美赛MCM数学建模A题:《石头台阶的“记忆”:如何用数学揭开历史的足迹》(全网最全思路+模型)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ 《石头台阶的“记忆”:如何用数学揭开历史的足迹》 目录 《石头台阶的“记忆”:如何用数学揭开历史的足迹》 ✨摘要✨ ✨引言✨ 1. 引言的结构 2. 撰写步骤 (1)研究背景 &#…...
python远程获取数据库中的相关数据并存储至json文件
1. conn中的5个变量的含义: ① Driver:数据库驱动程序,我使用的是SQL Server数据库。 ② Server:数据库所在的服务器地址。 ③ Database:要连接的数据库的名称。 ④ UID:登录 SQL Server 数据库的用户名…...
DeepSeek-R1解读:纯强化学习,模型推理能力提升的新范式?
DeepSeek-R1解读:纯强化学习,模型推理能力提升的新范式? 1. Impressive Points2. 纯强化学习,LLM推理能力提升新范式?2.1 DeepSeek-R1-Zero2.2 DeepSeek-R1 3. 端侧模型能力提升:蒸馏>强化学习 1. Impre…...
系统安全及应用
一:账号安全控制 1.1 系统账号清理 1.1.1 将非登陆用户的Shell 设置为 /sbin/nologin (设置为这个解释器,禁止用户登陆) [rootlocalhost ~]# usermod -s /sbin/nologin zhangsan #将用户zhangsan 的登录解释器 设置为 /sbin/n…...
ubuntu解决普通用户无法进入root
项目场景: 在RK3566上移植Ubuntu20.04之后普通用户无法进入管理员模式 问题描述 在普通用户使用sudo su试图进入管理员模式的时候报错 解决方案: 1.使用 cat /etc/passwd 查看所有用户.最后一行是 若无用户,则使用 sudo useradd -r -m -s /…...
Mac m1,m2,m3芯片使用nvm安装node14报错
使用nvm安装了node 12/16/18都没有问题,到14就报错了。第一次看到这个报错有点懵,查询资料发现是Mac芯片的问题。 Issue上提供了两个方案: 1、为了在arm64的Mac上安装node 14,需要使用Rosseta,可以通过以下命令安装 …...
IDEA工具下载、配置和Tomcat配置
1. IDEA工具下载、配置 1.1. IDEA工具下载 1.1.1. 下载方式一 官方地址下载 1.1.2. 下载方式二 官方地址下载:https://www.jetbrains.com/idea/ 1.1.3. 注册账户 官网地址:https://account.jetbrains.com/login 1.1.4. JetBrains官方账号注册…...
实战网络安全:渗透测试与防御指南
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 引言 在数字化时代,网络安全已成为企业和个人不可忽视的重要课题。网络攻击的复杂性与日俱增,从数据泄露…...
Vue 3 中的 toRef 与 toRefs:使用与案例解析
在 Vue 3 的响应式系统中,toRef 和 toRefs 是两个非常实用的工具函数。它们主要用于将响应式对象的属性转换为单独的 ref,以便在模板或逻辑中更方便地使用。本文将详细介绍 toRef 和 toRefs 的用法,并通过一个老师信息的案例来演示它们的实际…...
如何让Dev-C++支持C++11及以上标准
目录 问题描述解决方案步骤1:打开编译选项 问题描述 在Dev-C中使用C11/17/20新特性(如pop_back()等)时,可能出现编译错误: #include <iostream> #include<string> using namespace std; int main() {str…...
java8-日期时间Api
目录 LocalDate更新时间LocalTimeLocalDateTimeInstantPeriod Duration格式化、解析日期-时间对象时区 java.util.Date java.util.Calendar 不支持时区 线程不安全 月份从0起线程不安全,只有包裹在ThreadLocal中才安全 java.text.DateFormat java.text.SimpleDateFo…...
电脑无法开机,重装系统后没有驱动且驱动安装失败
电脑无法开机,重装系统后没有驱动且驱动安装失败 前几天电脑突然坏了,电脑卡住后,强制关机,再开机后开机马上就关机。尝试无数次开机后失败,进入BIOS界面,发现已经没有Windows系统了。重新安装系统后&…...
Vue.js 传递路由参数和查询参数
Vue.js 传递路由参数和查询参数 在 Vue.js 开发中,Vue Router 提供了灵活的方式来处理路由参数和查询参数,使得组件能够根据不同的路径或查询条件渲染相应的内容。 路由参数 路由参数(也称为路径参数)是 URL 路径的一部分&…...
Java 反射机制介绍
Java学习资料 Java学习资料 Java学习资料 一、引言 在 Java 编程里,反射机制是一项强大且独特的特性。它赋予程序在运行时动态地获取类的信息,并且可以操作类或对象的属性、方法和构造函数等。借助反射机制,程序的灵活性和可扩展性得到显著…...
Final2x--开源AI图片放大工具
Final2x--开源AI图片放大工具 链接:https://pan.xunlei.com/s/VOHSklukQAquUn3GE7eHJXfOA1?pwdr3r3#...
TCP全连接队列
1. 理解 int listen(int sockfd, int backlog) 第二个参数的作用 backlog:表示tcp全连接队列的连接个数1。 如果连接个数等于backlog1,后续连接就会失败,假设tcp连接个数为0,最大连接个数就为1,并且不accept获取连接…...
前端力扣刷题 | 4:hot100之 子串
560. 和为K的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例: 输入:nums [1,1,1], k 2 输出:2 法一:暴力法 var subar…...
【精选】基于数据挖掘的招聘信息分析与市场需求预测系统 职位分析、求职者趋势分析 职位匹配、人才趋势、市场需求分析数据挖掘技术 职位需求分析、人才市场趋势预测
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...
字节跳动发布UI-TARS,超越GPT-4o和Claude,能接管电脑完成复杂任务
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
2025课题推荐——USBL和DVL的误差建模与补偿
在海洋探测与研究中,定位技术的准确性至关重要。超短基线(USBL)和多普勒速度计(DVL)是两种广泛应用于水下定位和导航的技术,它们在深海探测、海洋工程和水下机器人等领域发挥着重要作用。然而,这…...
mysql_use_result的概念和使用案例
mysql_use_result 是 MySQL C API 中的一个函数,它用于检索一个结果集,并且不同于 mysql_store_result,它不会立即将整个结果集读入客户端。相反,它会初始化一个结果集,客户端随后可以通过调用 mysql_fetch_row 来逐行…...
微信小程序date picker的一些说明
微信小程序的picker是一个功能强大的组件,它可以是一个普通选择器,也可以是多项选择器,也可以是时间、日期、省市区选择器。 官方文档在这里 这里讲一下date picker的用法。 <view class"section"><view class"se…...
FLTK - FLTK1.4.1 - demo - adjuster.exe
文章目录 FLTK - FLTK1.4.1 - demo - adjuster.exe概述笔记根据代码,用fluid重建一个adjuster.fl 备注 - fluid生成的代码作为参考代码好了修改后可用的代码END FLTK - FLTK1.4.1 - demo - adjuster.exe 概述 想过一遍 FLTK1.4.1的demo和测试工程,工程…...
神经网络入门:从感知机到激活函数
什么是神经网络 神经网络(Neural Network) 是一种模拟生物神经系统工作方式的计算模型,是机器学习和深度学习的核心组成部分。它的设计灵感来源于人脑中神经元之间的连接和信息传递方式。神经网络通过模拟这种结构,能够从数据中学…...
第04章 13 管道信息对象分类说明
在VTK(Visualization Toolkit)中,管道信息(Pipeline Information)是一个重要的概念,它允许管道中的不同对象之间传递元数据和执行策略。这些信息对象帮助协调管道中各个组件的操作,确保数据在传…...
AI 发展是否正在放缓?AI 发展将驶向何方?
编者按: 人工智能真的已经遇到发展瓶颈了吗?随着 OpenAI、Google 和 Anthropic 等顶级 AI 公司纷纷表示新模型开发收益在减少,这个问题引发了整个行业的深度思考。 我们今天为大家带来的这篇文章,作者的核心观点是:虽然…...
一个简单的自适应html5导航模板
一个简单的 HTML 导航模板示例,它包含基本的导航栏结构,同时使用了 CSS 进行样式美化,让导航栏看起来更美观。另外,还添加了一些 JavaScript 代码,用于在移动端实现导航菜单的展开和收起功能。 PHP <!DOCTYPE htm…...
CrypTen——基于pytorch的隐私保护机器学习框架
目录 一、CrypTen概述 二、应用场景 三、CrypTen优势 四、CrypTen技术解析 1.基于pytorch的构建基础 2.核心密码学原语 3.加密模型训练流程 五、传统隐私保护技术与CrypTen的对比 1.传统隐私保护技术介绍 2.CrypTen与传统隐私保护技术的区别 六、CrypTen的环境配置…...
日志模块升级,采用sleuth实现日志链路追踪
文章目录 1.common-log4j2-starter1.目录结构2.pom.xml 引入sleuth3.application.yml 开启Sleuth4.log4j2-spring.xml xiugai 日志输出格式5.TraceIdFilter.java 输出带有TraceId的箭头6.LogAspect.java 更改AOP的范围(因为后面出现了栈溢出问题)7.pom.x…...
84,【8】BUUCTF WEB [羊城杯 2020]Blackcat
进入靶场 音乐硬控我3分钟 回去看源码 <?php // 检查 POST 请求中是否包含 Black-Cat-Sheriff 和 One-ear 字段 // 如果任意一个字段为空,则输出错误信息并终止脚本执行 if(empty($_POST[Black-Cat-Sheriff]) || empty($_POST[One-ear])){die(请提供 Black-C…...
中信证券、安我保险-安我股保联合策略
中信证券2025年资本市场年会在深圳开幕,会议以“站上起跑线”为主题,对2025年全球金融市场、宏观经济与政策、A股市场投资策略、大类资产配置、资本市场新格局下的各经济领域发展趋势进行了全面展望。 据悉,中信证券2025年资本市场年会,现场邀请了百余位顶尖学者、产业专家、企…...