新闻详情

新闻详情

首页 / 资讯中心 / 详情

深度学习线性代数入门:矩阵乘法、张量与维度

发布时间:2026/10/2 9:22:02来源:尧图网络
深度学习线性代数入门:矩阵乘法、张量与维度
1. 先搞清楚深度学习里的线性代数到底学的是什么今天这篇笔记是“深度学习Day4”系列里最硬核的一篇因为主角是数学。很多人一看到“线性代数”这四个字就开始发怵觉得要回到大学课堂补半天公式推导。但实际入坑之后你会发现深度学习里用到的线代远没有课本里那么抽象复杂。至少我自己把《动手学深度学习》刷到卷积那几章后最大的感受是与其说深度学习是“神经网络”不如说它是一场规模超大的矩阵乘法接力赛。先给没接触过的朋友一个基本认知深度学习里的数据不管是一张猫的图片、一句英文评论还是一段心电图信号落到内存里都只是一个多维数组。这个多维数组在深度学习术语里叫张量Tensor。图片就是三维张量长宽是像素坐标第三维是颜色通道一段文本就是一个二维矩阵行是单词位置列是词向量内容而模型的权重参数从第一层到最后输出层没有一个不是矩阵。所以线性代数在这个领域的角色是做模型的“骨架语言”。前向传播在算矩阵乘法反向传播在算矩阵乘法的转置优化器在更新矩阵里的每一个数值。你甚至可以这样理解训练一个神经网络本质上就是不断给一堆矩阵里的数字“调参数”调到一个新的输入进来时能产出正确输出的状态。这也是为什么线性代数基础越扎实的人后面看PyTorch源码、手推公式、调试代码的时候效率要高出好几倍。这篇笔记不只是罗列数学定义我会把标量、向量、矩阵、张量、矩阵乘法、范数、特征值这几样东西一个个跟深度学习的实际环节挂上钩。争取让零基础的朋友能看懂让已经写过几行网络代码、但数学概念还模糊的朋友有一份“哦原来我当时写的那步就是在做这件事”的恍然大悟。毕竟啃基础的目的是为了少踩坑、别再怕代码里冒出来的各种shape而不是为了考试。1.1 深度学习里的每个参数都是一堆矩阵在“算账”拿一个最简单的图像分类任务举例。你给模型一张28×28像素的灰度手写数字图片在代码里这个样本的形状就是(1, 784)也就是把它展平成一维向量。模型第一层要做的事就是把输入向量乘上一个权重矩阵W1再加一个偏置向量b1然后过激活函数。这一层的完整计算就是 output activation(x W1 b1)。这里的符号就是矩阵乘法。如果W1的形状是(784, 128)那么一个样本经过第一层就变成了128维的向量。你看784个像素输入进来经过矩阵变换后变成了128个“抽象特征”。从数学上看神经网络每一层干的事就是把上一层的表达空间变换到一个新的空间这个变换靠的基本就是矩阵乘法。所有关于“特征提取”“表征学习”的说法底层的数学动作就是这么简单。模型参数量有多大也是由矩阵的形状决定的。如果输入是784维第一层权重是784×128偏置是128再加上后续各层的矩阵模型的“记忆容量”很大程度就取决于这些矩阵能组合出多少种变换方式。所以当你看到BERT这样的大模型参数是亿级别的时候你可以想象那里面的权重矩阵已经多到什么程度——几百个线性层堆叠的结果。我个人建议第一次接触网络结构的时候不用急着看论文里的结构图而是动手把每个层输入输出的shape写出来再对照一下对应的线性代数操作。你很快会发现所谓“维度匹配”其实就是矩阵乘法里“内维相同”这个规则的直接体现。把这条规矩吃透后续看卷积、注意力机制都会顺很多。1.2 一张表格分清标量、向量、矩阵与张量很多初学者卡在线性代数一部分原因是被术语吓到了。其实这几个概念并不复杂搞一张对照表就能明白名称维度数形状示例深度学习里对应什么标量0维()学习率、损失值、准确率等单个数值向量1维(784,)单条样本展平后的特征矩阵2维(32, 784)一批样本、稠密层权重张量3维及以上(32, 3, 224, 224)一批彩色图片、序列数据我着重要强调的一点是张量是高维矩阵的总称它不仅包括3维、4维也包括1维2维所以向量和矩阵都可以叫张量。在PyTorch里面所有数据都叫TensorPython里叫list和数组的东西都要转换成Tensor才能送进模型。这不代表它多神秘只是它把所有“带形状的数”统一称呼而已。还有一点容易混淆的是维度方向的顺序。比如一张批量为32的彩色图片常见写法是(32, 3, 224, 224)意思是32张图每张有3个颜色通道红绿蓝每个通道是224×224的像素网格。第一次接触时最容易犯的错就是把通道数当成图片的前两维。这种维度感知能力说到底就是线性代数里“矩阵的行列顺序”对上了深度学习里的“数据排布约定”。为了让这个印象更深刻我建议你用NumPy练手的时候拿到一组数据先别急着写代码先在纸上把它的shape写出来再猜一下每个维度分别代表什么。多数训练过程里的维度错乱问题根源就是写代码的人对数据形状缺乏直觉中间一维多转置一次或少转置一次整个模型就train不起来了。2. 从标量到张量四张“牌”的入门解读既然张量是深度学习里的通用数据结构那这几个基础概念就得重点关照一下。我见过不少朋友代码写得飞起但一问他“向量的长度和维度数分别指什么”他反而会卡壳。这里我想把每一张“牌”跟实际编程里的变量一一对应起来。2.1 标量、向量、矩阵、张量怎么对应到实际项目里先说标量。标量是最简单的单个数字在Python里就是a 0.5。写成PyTorch代码是torch.tensor(0.5)。它的形状是空的也就是0维。深度学习训练过程里几乎每个关键节点都在产生标量loss的值、准确率的值、学习率的值这是你监控训练状态时最常看的对象。NaN和Inf这种问题也是以标量形式出现在loss曲线里一旦出现就说明前向或反向计算的某个环节出了问题。向量就是一组有序排列的数在代码里最像一个一维数组a [1, 2, 3]。在深度学习里一条数据往往被表示成向量。比如一个房价预测问题输入房子的面积、卧室数量、楼层数这就是一个三维向量。对于单条文本经过词嵌入后是一个二维矩阵行对应单词位置列对应词向量维度但如果只看某个词的表示也可以说它是这个词的向量。向量在几何上可以理解成多维空间中的一个点或者从原点指向那个点的箭头。矩阵是把数按行和列排成一个矩形。其他都一样它比向量多了一个“行”的维度。在深度学习代码里最常见的是权重矩阵。一个线性层输入维度是d_in输出维度是d_out那它的权重的形状就是(d_out, d_in)。矩阵的每一行都可以理解成一个线性变换后的输出特征模型更新参数时更新的就是矩阵里的每个数值。你可以把矩阵理解成一台“变形机”把输入向量拧成另一个向量顺便改变它的维度和方向。张量则是更广义的多维数组。一张彩色图片用三维张量表示一段视频就变成四维张量再多几个batch维度就变成五维。现在的Transformer模型里输入通常要加一个batch维、一个时间步维、一个特征维加一个可能的通道维形状复杂得让人头皮发麻。但只要你习惯用shape来理解数据这些都能捋顺。2.2 维度不要靠猜先学会用shape说话我见过太多人在debug时最常说的一句话就是“我这个tensor的形状大概是这样”。但“大概”两个字就是很多bug的来源。神经网络里维度一旦对不上哪怕只差一个数字矩阵乘法就会直接报错。与其靠猜不如把每个张量的shape当成坐标系一样对待打印出来之后一维一维对照含义。举个例子。你在NumPy里创建一个数组import numpy as np x np.random.randn(32, 3, 224, 224)这个x的shape是(32, 3, 224, 224)如果你要把它传给一个只接受二维输入的模型你就得想办法降维。最常见的是用reshape或者transpose。reshape是改变排列transpose是交换轴的顺序。这两个操作的区别一定要弄清楚。reshape(32, 3224224)就变成(32, 200704)其中3224224直接乘起来是把后三个维度全展平。transpose(0, 2, 3, 1)则会把通道维挪到最后一位变成NHWC格式。在PyTorch里也是同理.shape和.size()随时可以打印。我自己的习惯是每定义一个新的Tensor或者每过一个模块后就在关键节点打印一下当前数据的形状跑一次确认所有维度都符合预期后再往下写。这个习惯帮我省下的调试时间远大于打印语句带来的那一点点性能开销。还有一个小技巧不要只用眼睛看文档里的shape描述确实跑一遍、立刻打印、立刻确认。很多序列模型的维度在文档里写得云里雾里但你只要把一个假数据灌进去跑一次前向所有的shape都会原形毕露。这种“跑一下看看shape”的调试方式在我看来是学深度学习数学基础最实用的方法之一。3. 矩阵乘法深度学习中最“费算力”也是最重要的动作现在进入全篇的核心部分——矩阵乘法。我觉得说它是深度学习的“国民运算”一点不夸张。不管是卷积还是Transformer里的注意力机制底层里最烧算力的基本都是矩阵乘法。理解了矩阵乘法是怎么算的、为什么GPU适合做这件事你看任何网络结构都会觉得清爽不少。3.1 点积是矩阵乘法的细胞搞懂它后面全通先别急着背公式。矩阵乘法其实由一个个点积组成的。两个向量做点积就是把对应位置的元素相乘再相加得到一个数。比如向量a[a1, a2, a3]向量b[b1, b2, b3]他们的点积就是a1b1a2b2a3b3。几何直觉上点积可以理解为一个向量在另一个向量方向上的投影长度再乘上另一个向量的长度。如果两个向量方向越接近点积越大如果正交点积就是0。这是理解注意力机制score的基础。矩阵乘以向量可以看成是矩阵里每一行分别和这个向量做点积得到一个由多个标量组成的新向量。而矩阵乘以矩阵可以看成是左矩阵的每一行和右矩阵的每一列做点积得到结果矩阵里的一个数值。所以矩阵乘法的规则就是你拿一个m行k列的矩阵去乘一个k行n列的矩阵结果是一个m行n列的矩阵。这里的“内维相同”是很硬性的要求——左矩阵的列数必须等于右矩阵的行数。在代码里这就是一行事import numpy as np A np.random.randn(4, 3) B np.random.randn(3, 5) C A B print(C.shape) # (4, 5)之所以强调这个规则是因为深度学习里80%的维度错误都栽在“内维不匹配”上。你可能会遇到一个报错比如“mat1 and mat2 shapes cannot be multiplied”它其实就是告诉你A的列数和B的行数对不上。好消息是这类错误的信息提示一般都很明确坏消息是很多时候你手忙脚乱地转置一下维度对了但语义错了——转置后虽然能跑通但数学上算的已经不是你原本想算的那个东西了。这种隐藏错误最坑人。3.2 用NumPy手写一个线性层感受一次前向传播线性层是神经网络最低级也最核心的组件。PyTorch里你只要写nn.Linear(784, 128)底层干的事就是准备一个(128, 784)的权重矩阵和一个(128,)的偏置向量。为了感受线代的实际作用我们完全可以用NumPy把这一步手工实现一遍。假设输入一个样本它是784维的向量x权重矩阵W形状是(128, 784)偏置b形状是(128,)。前向传播就是import numpy as np x np.random.randn(784) W np.random.randn(128, 784) b np.random.randn(128) h W x b print(h.shape) # (128,)这一步作用在数学上就是把784维的向量x通过线性变换映射到128维的空间。如果x是一个包含全局信息的原始输入这128维就是网络自己“学会”的抽象特征。之后再叠加激活函数和另一个线性层就构成了多层感知机。你可以把这个过程理解成网络一层层地对输入做“变形”每一次变形都是从一组原始特征“计算”出一组新的特征而变形的参数正是矩阵W里的值。如果换成一批32个样本X形状是(32, 784)那么整个前向过程变成X np.random.randn(32, 784) H_batch X W.T b # 注意这里用的是 W.T等一下这里突然多了一个转置W.T让很多新手疑惑。其实逻辑很简单单样本时x是(784,)向量W是(128, 784)直接W x没问题结果(128,)。但一批样本到来时X是(32, 784)你不能直接把X放到W左边因为X W的形状是(32, 128)吗算一下就知道X是32行784列W是128行784列X的列数784和W的行数128不一致乘不了。所以需要把W转置成(784, 128)这样X W.T就是(32, 128)再广播加上b得到(32, 128)的输出。这个小细节特别值得记住。它说明了一个很基本的道理当你从单样本思维切换到批量思维时矩阵乘法的顺序、转置位置都很容易出错。我也因此养成了一个习惯无论写什么网络先把批量维度加上用一批假数据跑一遍前向再看shape是否合理。模型最后能跑通只不过是第一步确保语义正确才算真的稳。3.3 为什么GPU天生适合矩阵乘法这个点可能有点偏题但我觉得对建立完整认知很有帮助。GPU之所以在深度学习时代成为主角很大程度上就是因为矩阵乘法的可并行性极强。矩阵乘法里结果中的每个元素只与左矩阵某一行和右矩阵某一列有关行与行之间、列与列之间互不干扰天然可以拆成很多独立的小任务同时计算。CPU是少数的强大核心适合处理复杂但有依赖关系的任务。GPU则是有几千个小核心特别适合那种“每个核心算一个点积最后拼成一个大矩阵”的工作方式。PyTorch在GPU上跑的时候CUDA库优化了矩阵乘法实现比如用tiling切块和共享内存让数据复用率大幅提升边缘云上跑大模型时深度学习框架的优化重点也基本都压在各种矩阵运算上。这对我们普通开发者的启发是理解矩阵乘法不仅是为了看懂公式也是为了提高对框架行为的直觉。比如在GPU上训练时你可能会发现某个网络层如果全是小矩阵乘法反而性能提升不明显因为并行度不够高而Transformer里的大矩阵乘法GPU利用率就非常可观。这样一个简单的“矩阵乘法形状”视角能从底层解释很多深度学习框架的性能差异。4. 逆矩阵、范数、特征值这些“进阶词汇”在深度学习里哪里冒出来如果说前面几个概念是深度学习的“骨架”那这一节里提到的逆矩阵、范数和特征值更像是各种模型里的“血液”和“神经”。它们不一定出现在每一行代码里但一定在某个环节悄悄发挥作用。4.1 逆矩阵为什么会有用却又常被绕开先说逆矩阵。一个方阵A如果有逆矩阵A⁻¹那A A⁻¹等于单位矩阵I。单位矩阵可以理解成线性代数里的“1”它不改变任何矩阵的形状和方向。在解线性方程组Ax b时只要你两边同时左乘A⁻¹就能直接得到x A⁻¹b。这是线性代数里最经典的应用。但在深度学习里你几乎见不到谁真的算逆矩阵。为什么呢因为深度学习要解决的绝大多数问题本质上都不是那种方程数量恰好等于未知数数量、而且条件良好的方程组。深度学习的参数数量往往多到爆炸样本数也远大于或远小于参数数量对应的是一个非常高维且欠定或超定的系统。这种情况下矩阵不可逆才是常态强行求逆数值上也会非常不稳定。那逆矩阵这个概念就完全没用了吗也不是。很多东西的思路是从“近似求逆”里来的。比如最小二乘法里正规方程的解就涉及(XᵀX)⁻¹Xᵀy只不过在样本量大、特征维度高时直接求逆代价太高工程上会用梯度下降等数值优化方法来逼近这个解。另外伪逆Moore-Penrose伪逆在处理这种不可逆矩阵时很有用一些线性层的初始化或特殊任务里还会见到它的影子。对普通学习者的意义是逆矩阵告诉你为什么梯度下降比直接求解析解更流行。理解了这一点你再看到优化器里的各种迭代更新公式时就会明白深度学习不走“一步到位”的路线而是一点一点逼近最优参数。这份直觉比会背逆矩阵的定义有用得多。4.2 范数正则化与损失函数里最常刷脸的数学工具范数衡量一个向量或矩阵的大小。最常用的两种是L1范数和L2范数。L2范数就是向量每个元素平方和再开根号也就是欧几里得长度数学上写作||x||₂。L1范数是所有元素的绝对值之和写作||x||₁。在深度学习代码里这俩的最典型应用是正则化。训练模型时为了防止权重矩阵里的数值长得太大导致过拟合我们会在损失函数里加一项惩罚项。L2正则化又叫权重衰减在优化器里经常写成weight_decay参数。它会在更新参数时把权重往零的方向拉一点。L1正则化则更狠会把很多权重直接压成精确的0产生稀疏性。我举个直观例子。假设损失函数是L 预测误差 λ·(w1² w2²)这里的w1和w2就是权重。λ越大权重越被限制在接近0的地方模型参数就越“简单”降低过拟合风险。在PyTorch里你只要给优化器传weight_decay1e-4就是在使用L2正则化。这个参数是我调参时特别注意的一个因为它的量级差一个数量级模型收敛效果都会差很多。还有一类范数应用是在损失函数里直接衡量向量之间的距离。比如图像生成任务里L1损失相比MSE更容易保留边缘分割任务里也有各种基于范数的损失变体。掌握范数概念后你看模型代码里那些torch.norm调用就不会再一头雾水了。4.3 特征值与特征向量从“变形”的角度理解网络特征值和特征向量这个概念可能是整篇里最抽象的但我会尽量把它讲得接地气。对于一个方阵A来说如果存在一个非零向量v使得A v λv这里的v就叫特征向量λ叫对应的特征值。怎么理解呢你可以把矩阵A理解成一种线性变换比如旋转、拉伸、压缩。绝大多数向量经过变换后方向和长度都会改变但特征向量很特别它的方向在变换后没有变只是被整体拉长或缩短了λ倍。和深度学习有关的应用最典型的是主成分分析PCA。PCA本质上就是计算协方差矩阵的特征值和特征向量取特征值最大的几个方向作为主成分方向。这些方向是数据方差最大的方向投影到这些方向上可以尽量保留信息。在模型压缩、可视化高维特征、初始化数据时PCA都算是最基础的工具之一。深度学习的网络权重可以看成一连串的线性变换加激活函数。如果某个矩阵的特征值特别大那么经过多次连乘后信号会被放大得很夸张容易产生梯度爆炸如果特征值特别小信号又容易消失产生梯度消失。理解特征值可以帮助你理解为什么残差连接、归一化这样的设计能够稳住深层网络的训练。我并不是建议你把矩阵对角化、Jordan标准型这些偏理论的内容全部啃一遍那就走偏了。但对特征值的直观理解——矩阵会拉伸或压缩特定方向的向量——会帮助你在调试深层网络时多一层思路。5. 新手最容易踩的坑维度错乱、广播机制与NaN写到这里我觉得应该分享一段实打实的踩坑记录。我自己刚入门的时候几乎天天被shape报错折磨。那些报错信息一大串看着吓人实际上大部分都是线代规则没配对。把常见的几类坑一次性讲清楚你会少熬夜很多次。5.1 矩阵乘法维度不匹配报错其实是好消息先说最“友好”的一类错误维度不匹配。以PyTorch为例你可能会看到类似这样的信息RuntimeError: mat1 and mat2 shapes cannot be multiplied (32x784 and 128x784)这句话翻译过来就是你试图用(32, 784)的矩阵去乘(128, 784)的矩阵但左矩阵的列数是784右矩阵的行数是128内维对不上。这时候你就要意识到要么把右矩阵转置成(784, 128)要么你数据排布的顺序搞错了。这类错误让人头大但好在它错误信息足够明确算是对新手最友好的一类问题。处理方法是先打印出所有相关张量的shape然后在纸上把矩阵乘法的内外维画出来对着图检查。我推荐一个笨办法给每个用到的张量起一个语义化名字比如input_batch、weight_first_layer然后在报错行附近print一下各自shape。很多因为变量名混乱而找不到病因的情况这样一查就水落石出。还有一个容易踩的坑是有时候你转置一下确实能过编译但算出来的东西不是你想要的。比如你想做的是batch内每个样本和对应标签的匹配结果转置后变成了样本间互相乱乘。这种“能跑但错”的情况比直接报错更阴险。所以要养成核对结果shape的习惯而不仅仅是看它是否报错。5.2 广播机制帮了忙也埋了雷广播是NumPy和PyTorch里一个很聪明的机制它允许形状不完全相同的数组做运算时自动补齐。比如你有(32, 128)的矩阵和(128,)的向量相加因为向量缺少行维度广播机制会自动把向量“复制”32行完成逐个元素相加。这个特性让代码写起来非常方便尤其体现在加偏置项这个过程。但广播也会带来隐藏问题。比如某次你想把形状为(128,)的偏置加到(32, 1, 128)的数据上结果偏置被广播到了错误的位置数值虽然对齐了但含义错了。这种bug在Transformer那种维度满天飞的结构里特别容易发生因为它不报错只会让你的模型默默变差。我的建议是如果你不确定某个运算的广播规则是否如你所愿就把数据形状打印出来看或者用torch.allclose对比一下两种写法的输出是否一致。广播本质上是在自动执行线性代数里的“外积展开”它省了写循环的时间但会放大了你对形状认知的每个缺陷。另外在写自定义损失函数时也要留个心眼。很多L1、L2损失需要对两个张量逐元素做差如果这两个张量的形状能广播但不完全一致你得到的损失值就会是一个大矩阵而不是一个标量。损失值莫名其妙变成个张量训练的时候就全乱套了。这时候用.sum()或.mean()压缩成标量也要问一句自己想压缩的方向对不对。5.3 学习顺序建议别从课本啃起围绕需求学最快最后聊聊怎么学。我特别不推荐一上来就去买一本几百页的线性代数教材从头啃那样对大多数人来说既枯燥又容易半途而废。更好的路径是先动手写代码遇到不会的数学概念再回头补。比如你写第一个全连接网络时就会碰到矩阵乘法和转置你给图像数据做flatten时就会碰到reshape你调参时就会碰到L2范数和梯度你看网络结构可视化时就会碰到特征空间。等到这些概念在实战里积累到一定数量你自然会想系统地把线代补一补。到那时再翻开教材你会发现每一章内容都似曾相识学起来效率奇高。我在自己实践里发现用“问题驱动”的方式学数学比线性地按章节推进要高效太多。有一个很好的直观学习材料是3Blue1Brown的“线性代数的本质”系列视频它对向量、矩阵乘法和特征向量的几何解释做得极其出色。我建议你在动手写了第一个线性层之后再去看那些几何动画会让你瞬间把代码里的张量、矩阵跟现实里的空间变换对应起来。还有一个我踩过坑后的建议别在数学理论里深挖太远。深度学习的线代需求其实远低于数学专业或传统数值计算。你不需要学矩阵分解的各种算法细节也不需要掌握Jordan标准型这类理论内容。把矩阵乘法、转置、范数、特征值和广播机制这几块吃熟已经足够支撑你跑完大部分CV和NLP项目。如果哪天你需要研究模型压缩或更高级的优化器再回头补特征分解和SVD都来得及。我个人在实际操作中的体会是数学基础这个事真的是“用进废退”。你越早在一遍遍调试shape的过程中体会到矩阵变换的实际意义就越不会把它当成一座翻不过去的山。哪怕你现在看到矩阵乘法还觉得晕也别慌拿真实数据在NumPy或PyTorch里多跑几次把每个中间结果的shape打印出来对照着看那些抽象符号很快都会变成你手里熟悉的老朋友。到最后你会发现所谓训练神经网络不过就是守护好每一层输入输出形状的同时把矩阵里的数字调到最合适的值罢了。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

并查集求连通分量:从USACO语言题看最少连接数建模 2026/10/2 10:12:03

并查集求连通分量:从USACO语言题看最少连接数建模

刷 USACO 的题刷久了,你会发现很多题其实就差一层窗户纸。P3026 [USACO11OPEN] Learning Languages S 就是这样一道典型的“连通分量”入门题:题面围绕着农场里的牛和语言绕来绕去,但一旦你把模型想清楚,代码量可以短到只有几十行…

阅读更多 →
低轨卫星与5G融合:NTN协议栈改造、链路仿真与组网选型实战 2026/10/2 10:12:03

低轨卫星与5G融合:NTN协议栈改造、链路仿真与组网选型实战

简介:这份《中国卫星互联网产业发展研究白皮书》由赛迪顾问物联网产业研究中心与新浪5G联合发布,面向通信、航天、投资及政策研究领域的从业者与学习者,系统梳理卫星互联网的产业全貌。资源包内含1个PDF文件,大小约923KB&#xff…

阅读更多 →
类型安全容器设计:从C++模板到Docker权限管理 2026/10/2 10:11:56

类型安全容器设计:从C++模板到Docker权限管理

“类型安全容器设计”这几个字,放在不同的技术语境里,指向的东西完全不一样。做应用层开发的人第一反应是 C 的 std::vector、std::map,或者 Java 里的 ArrayList、HashMap;干嵌入式的会想到 LVGL 的 lv_obj 容器、lottie 动画容器…

阅读更多 →
差越小积越大:从平方差公式到均值不等式的最值原理 2026/10/2 10:11:56

差越小积越大:从平方差公式到均值不等式的最值原理

前几天辅导一个初三的孩子,题目很简单:x和y加起来等于10,问xy最大能到多少。他思路很快,先试了1和9,又试了2和8,再试3和7,发现乘积从9涨到16又涨到21,马上猜到4和6应该更大&#xff…

阅读更多 →
wrk压测工具部署与实战:从已编译包到业务级压测 2026/10/2 10:11:50

wrk压测工具部署与实战:从已编译包到业务级压测

简介:一份已编译的wrk HTTP压测工具包,专为需要评估Web服务器、API接口或负载均衡器性能的开发、测试与运维人员准备。wrk基于LuaJIT脚本,支持通过自定义脚本模拟请求模式、校验响应状态、控制请求速率,能够灵活构造高并发测试场景…

阅读更多 →
JMeter随机变量全解析:从参数化原理到压测实战技巧 2026/10/2 10:11:50

JMeter随机变量全解析:从参数化原理到压测实战技巧

做性能测试这些年,我越来越发现一个道理: 真正影响压测结果真实性的,往往不是并发数调得高不高,而是测试数据准备得够不够“像”生产环境。 比如模拟100个用户同时登录,如果所有人用的都是同一个账号,那测…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉