大数据HCIE成神之路之数学(2)——线性代数
线性代数
- 1.1 线性代数内容介绍
- 1.1.1 线性代数介绍
- 1.1.2 代码实现介绍
- 1.2 线性代数实现
- 1.2.1 reshape运算
- 1.2.2 转置实现
- 1.2.3 矩阵乘法实现
- 1.2.4 矩阵对应运算
- 1.2.5 逆矩阵实现
- 1.2.6 特征值与特征向量
- 1.2.7 求行列式
- 1.2.8 奇异值分解实现
- 1.2.9 线性方程组求解
1.1 线性代数内容介绍
1.1.1 线性代数介绍
线性代数是一门被广泛运用于各工程技术领域的学科。用线性代数的相关概念和结论,可以极大地简化数据挖掘中相关公式的推导和表述。线性代数将复杂的问题简单化,让我们能够对问题进行高效地数学运算。
线性代数是一个数学工具,它不仅提供了有助于操作数组的技术,还提供了像向量和矩阵这样的数据结构用来保存数字和规则,以便进行加,减,乘,除的运算。
1.1.2 代码实现介绍
numpy是一款基于Python的数值处理模块,在处理矩阵数据方面有很强大的功能与优势。因为线性代数的主要内容就是对矩阵的处理,所以本章节主要的内容都是基于numpy进行展开。另外也会涉及到方程组求解,所以也会用到数学科学库scipy。
1.2 线性代数实现
导入相应库:
import numpy as np
import scipy as sp
1.2.1 reshape运算
在数学中并没有 reshape
运算,但是在numpy运算库中是一个非常常用的运算,用来改变一个张量的维度数和每个维度的大小,例如一个10x10的图片在保存时直接保存为一个包含100个元素的序列,在读取后就可以使用reshape将其从 1x100
变换为 10x10
。
示例如下:
生成一个包含整数0~11的向量
x = np.arange(12)
print(x)
结果输出:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
注意:如果是直接np.arange(12),输出结果为:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
扩展学习:
如果是想要以逗号进行隔开方式打印x,则可以指定一下:
new_x = np.array2string(x, separator = ",")
print(new_x)
输出结果为:
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11]
但是需要注意的是,此处打印的是str类型。
查看数组大小:
x.shape
结果输出:
(12,)
将x转换成二维矩阵,其中矩阵的第一个维度为1:
x = x.reshape(1,12)
print(x)
结果输出:
[[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]
查看数组大小
x.shape
结果输出:
(1, 12)
将x转换3x4的矩阵
x = x.reshape(3,4)
print(x)
结果输出:
[[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]]
1.2.2 转置实现
向量和矩阵的转置是交换行列顺序,而三维及以上张量的转置就需要指定转换的维度。
生成3*4的矩阵:
A = np.arange(12).reshape(3,4)
print(A)
结果输出:
[[ 0, 1, 2, 3],[ 4, 5, 6, 7],[ 8, 9, 10, 11]]
转置:
A.T
结果输出:
array([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])
1.2.3 矩阵乘法实现
矩阵乘法:记两个矩阵分别为A和B,两个矩阵能够相乘的条件为第一个矩阵的 列数
等于第二个矩阵的 行数
。
代码输入:
A = np.arange(6).reshape(3,2)
print(A)
结果输出:
[[0 1][2 3][4 5]]
B = np.arange(6).reshape(2,3)
print(B)
结果输出:
[[0, 1, 2],[3, 4, 5]]
矩阵相乘:
np.matmul(A,B)
注意:不要写成 A.matmul(B)
,也不能写成 A*B
。
结果输出:
array([[ 3, 4, 5],
[ 9, 14, 19],
[15, 24, 33]])
1.2.4 矩阵对应运算
元素对应运算:针对形状相同矩阵的运算统称,包括元素对应相乘、相加等,即对两个矩阵相同位置的元素进行加减乘除等运算。
创建矩阵:
A = np.arange(6).reshape(3,2)
矩阵相乘:
print(A*A)
结果输出:
array([[ 0, 1],
[ 4, 9],
[16, 25]])
矩阵相加:
rint(A + A)
结果输出:
array([[ 0, 2],
[ 4, 6],
[ 8, 10]])
1.2.5 逆矩阵实现
只有方阵才有 逆矩阵
,逆矩阵实现。
代码输入:
A = np.arange(4).reshape(2,2)
print(A)
结果输出:
array([[0, 1],
[2, 3]])
求逆矩阵:
np.linalg.inv(A)
结果输出:
array([[-1.5, 0.5],
[ 1. , 0. ]])
注意:此处是 np.linalg
!不是scipy.linalg
。可以自行了解如何求逆,此处不做过多解释。
提示:设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩B,使得: AB=BA=E
。 则我们称B是A的逆矩阵,而A则被称为可逆矩阵。其中,E为单位矩阵。
说明:
np.linalg
和 scipy.linalg
在提供线性代数函数方面有些重叠,但也存在一些区别。如果您只需要基本的线性代数功能,np.linalg足以满足您的需求。如果需要更高级的线性代数功能或特定的分解方法,您可能需要查看scipy.linalg中的函数。SciPy是建立在NumPy之上的科学计算库,提供了更广泛的数学、科学和工程计算功能。
如果是使用scipy的linalg
代码如下:
from scipy import linalg
linalg.inv(A)
输出结果为:
array([[-1.5, 0.5],[ 1. , 0. ]])
1.2.6 特征值与特征向量
当谈论矩阵的 特征值
和 特征向量
时,我们首先需要了解 线性变换
和 向量空间
的概念。
-
线性变换是指将一个向量空间中的向量映射到另一个向量空间中的向量的操作。在二维平面上的旋转和缩放、三维空间中的投影等都是线性变换的例子。
-
向量空间是指由多个向量组成的集合,其中的向量可以进行加法和数乘运算。向量空间可以是二维平面、三维空间或更高维度的空间。
现在,我们来解释矩阵的特征值和特征向量:
-
特征值(Eigenvalues)是一个数值,表示线性变换作用后的向量在同一方向上的缩放倍数。当一个向量在经过线性变换后,只发生缩放而不改变方向时,这个缩放倍数就是特征值。
-
特征向量(Eigenvectors)是与特征值相关联的向量。它是表示在线性变换下保持在同一方向上的向量。特征向量不会改变方向,而是在线性变换后仅仅以特征值的倍数进行缩放。
具体来说,对于一个n维向量空间中的线性变换,我们可以表示为一个n×n的矩阵A。如果存在一个非零向量v和一个标量λ,使得下式成立:
A * v = λ * v
其中,v是 特征向量
,λ是 特征值
。这意味着当矩阵A作用在特征向量v上时,结果只是将v进行了缩放,缩放的比例由特征值λ确定。
特征值和特征向量对于矩阵的理解和分析非常重要。它们提供了关于矩阵在线性变换过程中的行为和性质的信息。通过计算矩阵的特征值和特征向量,我们可以了解线性变换的缩放效果和主要方向,并在许多应用中提供有用的洞察力,如主成分分析、图像处理和振动分析等。
接下来进行求矩阵的 特征值
与 特征向量
并实现可视化。
导入相应库:
from scipy.linalg import eig
import numpy as np
import matplotlib.pyplot as plt
求特征值与特征向量:
A = [[1, 2],#生成一个2*2的矩阵[2, 1]]
evals, evecs = eig(A) #求A的特征值(evals)和特征向量(evecs)
evecs = evecs[:, 0], evecs[:, 1]
plt.subplots()
返回一个Figure实例fig 和一个 AxesSubplot实例ax。fig代表整个图像,ax代表坐标轴和画的图。 作图:
fig, ax = plt.subplots()
输出图片如下:
让坐标轴经过原点:
for spine in ['left', 'bottom']:#让在左下角的坐标轴经过原点ax.spines[spine].set_position('zero')
画出网格:
ax.grid(alpha=0.4)
设置坐标轴的范围:
xmin, xmax = -3, 3
ymin, ymax = -3, 3
ax.set(xlim=(xmin, xmax), ylim=(ymin, ymax))
输出结果为:
[(-3.0, 3.0), (-3.0, 3.0)]
画出 特征向量
。用一个箭头指向要注释的地方,再写上一段话的行为,叫做annotate。text是输入内容;xy:箭头指向;xytext文字所处的位置;arrowprops通过arrowstyle表明箭头的风格或种类:
for v in evecs:ax.annotate(text="", xy=v, xytext=(0, 0),arrowprops=dict(facecolor='blue',shrink=0,alpha=0.6,width=0.5))
注意:
问题原因:annotate()的’s’参数自Matplotlib 3.3以后已重命名为’text’,不能使用s,不然会报错。
画出 特征空间
:
x = np.linspace(xmin, xmax, 3)#在指定的间隔内返回均匀间隔的数字
for v in evecs:a = v[1] / v[0] #沿特征向量方向的单位向量ax.plot(x, a * x, 'r-', lw=0.4)# 参数 lw 表示图线的粗细
plt.show()
可视化图像:
蓝箭头向量为特征向量,两条红色直线组成的空间为特征空间。
1.2.7 求行列式
求一个矩阵的行列式。
代码输入:
E = [[1, 2, 3],[4, 5, 6],[7, 8, 9]]
print(np.linalg.det(E))
np.linalg.det()
是NumPy库中的一个函数,用于计算矩阵的 行列式
。在这里,我们将矩阵E作为参数传递给np.linalg.det()
函数
结果输出:
-9.51619735392994e-16
扩展阅读:
图说行列式:几张图让你明白行列式的性质
行列式的几何意义
总结:其实一个行列式的几何意义是有向线段(一阶行列式)或有向面积(二阶行列式)或有向体积(高阶行列式)。
1.2.8 奇异值分解实现
接下来利用奇异值分解(Singular Value Decomposition,SVD),通过文章标题出现的关键词,对文章进行聚类。
导入相应模块:
import numpy as np
import matplotlib.pyplot as plt
输入关键字:
words = ["books","dad","stock","value","singular","estate","decomposition"]
设已知8个标题,7个关键字。记录每个标题中每个关键字出现的次数,得矩阵X。 X中每一行表示一个标题,每一列表示一个关键字,矩阵中的每个元素表示一个关键字中一个标题中出现的次数。
X=np.array([[0,2,1,0,0,0,0],[2,0,0,1,0,1,0],[1,0,0,0,0,0,1],[0,0,1,0,0,0,0],[0,1,0,0,0,0,0],[0,0,0,1,1,0,1],[0,1,0,0,1,0,0],[0,0,0,0,1,1,1]])
进行奇异值分解:
U,s,Vh=np.linalg.svd(X)
输出左奇异矩阵U:
print("U=",U)
输出结果:
U= [[-1.87135757e-01 -7.93624528e-01 2.45011855e-01 -2.05404352e-01-3.88578059e-16 5.75779114e-16 -2.57394431e-01 -4.08248290e-01][-6.92896814e-01 2.88368077e-01 5.67788037e-01 2.22142537e-012.54000254e-01 -6.37019839e-16 -2.21623012e-02 2.05865892e-17][-3.53233681e-01 1.22606651e-01 3.49203461e-02 -4.51735990e-01-7.62000762e-01 1.27403968e-15 2.72513448e-01 3.80488702e-17][-2.61369658e-02 -1.33189110e-01 7.51079037e-02 -6.44727454e-015.08000508e-01 1.77635684e-15 3.68146235e-01 4.08248290e-01][-8.04993957e-02 -3.30217709e-01 8.49519758e-02 2.19661551e-01-2.54000254e-01 -4.81127681e-16 -3.12770333e-01 8.16496581e-01][-3.95029694e-01 1.56123876e-02 -5.28290830e-01 -6.82340484e-021.27000127e-01 -7.07106781e-01 -2.09360158e-01 1.55512464e-17][-2.02089013e-01 -3.80395849e-01 -2.12899198e-01 4.80790894e-018.04483689e-16 -1.60632798e-15 7.33466480e-01 1.76241226e-16][-3.95029694e-01 1.56123876e-02 -5.28290830e-01 -6.82340484e-021.27000127e-01 7.07106781e-01 -2.09360158e-01 -1.23226632e-16]]
输出奇异值矩阵:
print("s=",s)
按每个奇异值一一对应一个左奇异向量和一个右奇异向量奇异值从大到小排列输出结果:
s= [2.85653844 2.63792139 2.06449303 1.14829917 1. 1.0.54848559]
输出右奇异矩阵Vh:
print("Vh",Vh)
输出结果:
Vh [[-6.08788345e-01 -2.29949618e-01 -7.46612474e-02 -3.80854846e-01-3.47325416e-01 -3.80854846e-01 -4.00237243e-01][ 2.65111314e-01 -8.71088358e-01 -3.51342402e-01 1.15234846e-01-1.32365989e-01 1.15234846e-01 5.83153945e-02][ 5.66965547e-01 1.75382762e-01 1.55059743e-01 1.91316736e-02-6.14911671e-01 1.91316736e-02 -4.94872736e-01][-6.48865369e-03 2.52237176e-01 -7.40339999e-01 1.34031699e-012.99854608e-01 1.34031699e-01 -5.12239408e-01][-2.54000254e-01 -2.54000254e-01 5.08000508e-01 3.81000381e-012.54000254e-01 3.81000381e-01 -5.08000508e-01][ 0.00000000e+00 -7.68640544e-16 2.33583082e-15 -7.07106781e-01-1.21802199e-15 7.07106781e-01 1.91457709e-15][ 4.16034348e-01 -1.71550021e-01 2.01922906e-01 -4.22112199e-015.73845817e-01 -4.22112199e-01 -2.66564648e-01]]
规定坐标轴的范围:
plt.axis([-0.8,0.2,-0.8,0.8])
输出图像为:
原每个关键字由 1*8
的向量表示,现降维成 1*2
的向量以便进行可视化
for i in range(len(words)):plt.text(U[i,0],U[i,1],words[i])
plt.show()
可视化结果:
这张图是奇异值分解(SVD)的结果。奇异值分解是一种在线性代数中常用的矩阵分解方法,它将一个矩阵分解为三个矩阵的乘积,这三个矩阵分别代表了旋转、缩放和另一次旋转。在这张图中,每个点代表一个单词,它们的位置是通过奇异值分解得到的。这种分解方法可以帮助我们理解数据的结构和关系。
将到2维可视化后,我们可以将关键词聚类,如singular和decomposition距离比较近可以被划分为一组。
扩展阅读:
2分钟看懂奇异值分解
什么是奇异值分解SVD–SVD如何分解时空矩阵
补充:奇异值是特征值的开根。
1.2.9 线性方程组求解
求解线性方程组比较简单,只需要用到一个函数 scipy.linalg.solve()
就可以了。
比如我们对胶片中矩阵章节中的部门月度跑步案例进行线性方程组求解,线性方程组如下:
10x_1 + 8x_2 + 12x_3 = 20
4x_1 + 4x_2 + 2x_3 = 8
2x_1 - 4x_2- 2x_3 = -5
代码输入:
from scipy.linalg import solve
a = np.array([[10, 8, 12], [4, 4, 2], [2, -4, -2]])
b = np.array([20,8,-5])
x = solve(a, b)
print(x)
结果输出:
[0.5 1.3125 0.375 ]
相关文章:

大数据HCIE成神之路之数学(2)——线性代数
线性代数 1.1 线性代数内容介绍1.1.1 线性代数介绍1.1.2 代码实现介绍 1.2 线性代数实现1.2.1 reshape运算1.2.2 转置实现1.2.3 矩阵乘法实现1.2.4 矩阵对应运算1.2.5 逆矩阵实现1.2.6 特征值与特征向量1.2.7 求行列式1.2.8 奇异值分解实现1.2.9 线性方程组求解 1.1 线性代数内…...
音视频学习(十八)——使用ffmepg实现视音频解码
视频解码 初始化 视频常用的编解码器id定义(以h264和h265为例) // 定义在ffmpeg\include\libavcodec\avcodec.h AV_CODEC_ID_H264 AV_CODEC_ID_H265查找解码器:根据编解码id查看解码器 AVCodec* pCodecVideo avcodec_find_decoder(codec…...
nginx的GeoIP模块
使用场景 过滤指定地区/国家的IP,一般是国外IP禁止请求。 使用geoip模块实现不同国家的请求被转发到不同国家的nginx服务器,也就是根据国家负载均衡。 前置知识 GeoIP是什么? 官网地址 https://www.maxmind.com/en/home包含IP地址的地理位…...

mac控制台命令小技巧
shigen日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 hello伙伴们,作为忠实的mac骨灰级别的粉丝,它真的给我带来了很多效率上的提升。那作为接…...

Postman:API测试之Postman使用完全指南
Postman是一个可扩展的API开发和测试协同平台工具,可以快速集成到CI/CD管道中。旨在简化测试和开发中的API工作流。 Postman工具有Chrome扩展和独立客户端,推荐安装独立客户端。 Postman有个workspace的概念,workspace分personal和team类型…...

Flume学习笔记(3)—— Flume 自定义组件
前置知识: Flume学习笔记(1)—— Flume入门-CSDN博客 Flume学习笔记(2)—— Flume进阶-CSDN博客 Flume 自定义组件 自定义 Interceptor 需求分析:使用 Flume 采集服务器本地日志,需要按照日志…...
go的字符切片和字符串互转
Go 1.21 // 返回一个Slice,它的底层数组自ptr开始,长度和容量都是len func Slice(ptr *ArbitraryType, len IntegerType) []ArbitraryType // 返回一个指针,指向底层的数组 func SliceData(slice []ArbitraryType) *ArbitraryType // 生成一…...

所见即所得的动画效果:Animate.css
我们可以在集成Animate.css来改善界面的用户体验,省掉大量手写css动画的时间。 官网:Animate.css 使用 1、安装依赖 npm install animate.css --save2、引入依赖 import animate.css;3、在项目中使用 在class类名上animate__animated是必须的&#x…...

ERR:Navicat连接Sql Server报错
错误信息:报错:未发现数据源名称并且未指定默认驱动程序。 原因:Navicat没有安装Sqlserver驱动。 解决方案:在Navicat安装目录下找到sqlncli_x64.msi安装即可。 一键安装即可。 Navicat链接SQL Server配置 - MarchXD - 博客园 …...

python算法例10 整数转换为罗马数字
1. 问题描述 给定一个整数,将其转换为罗马数字,要求返回结果的取值范围为1~3999。 2. 问题示例 4→Ⅳ,12→Ⅻ,21→XⅪ,99→XCIX。 3. 代码实现 def int_to_roman(num):val [1000, 900, 500, 400,100, 90, 50, 40…...

springboot引入第三方jar包放到项目目录中,添加web.xml
参考博客:https://www.cnblogs.com/mask-xiexie/p/16086612.html https://zhuanlan.zhihu.com/p/587605618 1、在resources目录下新建lib文件夹,将jar包放到lib文件夹中 2、修改pom.xml文件 <dependency><groupId>com.lanren312</grou…...

大数据研发工程师课前环境搭建
大数据研发工程师课前环境搭建 第一章 VMware Workstation 安装 在Windows的合适的目录来进行安装,如下图 1.1 双击打开 1.2 下一步,接受协议 1.3 选择安装位置 1.4 用户体验设置 1.5 快捷方式 已经准备好安装,点击安装 1.6 安装中 1.7 安装…...

Qt图形视图框架:QGraphicsItem详解
Qt图形视图框架:QGraphicsItem详解 Chapter1 Qt图形视图框架:QGraphicsItem详解Chapter2 自定义QGraphicsItem实现平移、改变尺寸和旋转1. 平移2. 改变尺寸3. 旋转完整代码如下:头文件源文件 Chapter1 Qt图形视图框架:QGraphicsIt…...

defer和async
如果两个属性浏览器都不兼容,推荐把<script>标签放到底部 一般情况下,浏览器在解析html源文件时,如果遇到外部的<script>标签,解析过程就会先暂停,这时会对script进行加载,执行两个过程&…...

数电实验-----实现74LS139芯片扩展为3-8译码器以及应用(Quartus II )
目录 一、74LS139芯片介绍 芯片管脚 芯片功能表 二、2-4译码器扩展为3-8译码器 1.扩展原理 2.电路图连接 3.仿真结果 三、3-8译码器的应用(基于74ls139芯片) 1.三变量表决器 2.奇偶校验电路 一、74LS139芯片介绍 74LS139芯片是属于2-4译码器…...
洋葱架构、三层架构及两者区别
前言 洋葱架构它的名称来源于洋葱的层次结构,即软件代码的各层次之间的关系。在这种架构中,应用程序的各个组件通过一系列层次结构被逐层包裹在一起,形成一个类似于洋葱的结构。 一、经典三层架构 三层架构是一种软件设计模式,…...

JavaEE进阶学习:Spring 的创建和使用
Spring 就是⼀个包含了众多工具方法的 IoC 容器。既然是容器那么它就具备两个最基本的功能: 将对象存储到容器(Spring)中从容器中将对象取出来 接下来使用 Maven 方式来创建一个 Spring 项目,创建 Spring 项目和 Servlet 类似&a…...
音视频项目—基于FFmpeg和SDL的音视频播放器解析(十四)
介绍 在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…...

Tomcat无法映射到activiti-app导致activiti无法启动页面
原因之一:JDK版本与Tomcat版本不匹配,jdk8 yyds 我使用的是JDK11,Tomcat是9.0的,都是最新的,但还是不行,最后JDK改为8,tomcat的cmd后台没有报错,activiti-pp也可以正常访问了,很神奇…...
c语言常见的面试问题
在C语言编程中,面试官可能会询问你以下一些常见问题: 什么是C语言? C语言是一种通用的、过程式的计算机编程语言,由Dennis Ritchie在1972年创建。它是Unix操作系统的核心语言,也是许多其他编程语言(如Go、…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...