矩阵论 •「线性变换」

线性变换

关于变换:在两个集合之间可以定义一个映射。当集合为数集时,我们称这个映射为“函数”;当集合为线性空间时,就称这个映射为“变换”(之所以叫变换,隐含了一种运动的思想)。“变换”实际上就是“函数”的一种花哨的说法,只是在线性代数中,变换主要考虑作用的是线性空间中的元素,而不是函数中的数字;线性空间中的元素可以简单理解为向量.

线性变换

定义:设 V V V 是一个线性空间, T T T V V V 到自身的一个映射,对于 V V V 中的任意元素 v ⃗ \vec{v} v 均存在唯一的 v ′ ⃗ ∈ V \vec{v'} \in V v V 与之对应,则称 T T T 为线性空间 V V V 上的一个变换,记为 T v ⃗ = v ′ ⃗ T\vec{v}=\vec{v'} Tv =v (注意:“到自身”限定了变换矩阵为方阵?)一个变换可以非常复杂,然而幸运的是,线性变换对变换进行了限定,是一种特殊的变换;向量的线性运算有加法和数量乘法,那么线性变换顾名思义,就是针对向量的线性运算的变换,它满足:
T ( x ⃗ + y ⃗ ) = T ( x ⃗ ) + T ( y ⃗ ) T ( k x ⃗ ) = k T ( x ⃗ ) \begin{align} T(\vec{x} + \vec{y}) &= T(\vec{x}) + T(\vec{y}) \\ T(k\vec{x}) &= kT(\vec{x}) \end{align} T(x +y )T(kx )=T(x )+T(y )=kT(x )
线性变换有一些性质和运算规律,在此做一些举例:

  • 线性变换把零元素仍变为零元素(原点固定)
  • 线性变换把线性相关的元素组仍变为线性相关的元素组,但线性无关的元素组经过线性变换不一定再是线性无关的(例如降维);
  • 线性变换的和 T 1 + T 2 : ∀ x ⃗ ∈ V , ( T 1 + T 2 ) x ⃗ = T 1 x ⃗ + T 2 x ⃗ T_1+T_2\text{:}\quad\forall \vec{x}\in V\text{,}\quad(T_1+T_2)\vec{x}=T_1\vec{x}+T_2\vec{x} T1+T2:x V,(T1+T2)x =T1x +T2x
  • 线性变换的数乘 k T : ∀ x ⃗ ∈ V , ( k T ) x ⃗ = k ( T x ⃗ ) kT:\quad\forall \vec{x}\in V\text{,}\quad(kT)\vec{x}=k(T\vec{x}) kT:x V,(kT)x =k(Tx )
  • 线性变换的乘积 T 1 T 2 : ∀ x ⃗ ∈ V , ( T 1 T 2 ) x ⃗ = T 1 ( T 2 x ⃗ ) T_1T_2:\quad\forall \vec{x}\in V\text{,}(T_1T_2)\vec{x}=T_1(T_2\vec{x}) T1T2:x V,(T1T2)x =T1(T2x )

通常,线性变换的乘积不满足交换律,且不是所有的变换都具有逆变换;这对应着矩阵的乘积和逆.

线性变换的矩阵表示 ⭐

线性空间是一个非常抽象的概念,线性空间中的元素可以多种多样。线性变换的矩阵表示目的在于:把一个线性空间上的线性变换(元素之间的映射),转化为了坐标之间的变换,并通过矩阵来描述这个变换。对任何线性空间,给定基后,我们对元素进行线性变换或线性运算时,只需用线性变换的矩阵右乘以元素的坐标“向量”即可。注意,实际上在这个变换的过程中,选择的描述这个线性空间 V V V 的基不变。这样的话我们就可以通过矩阵 + 坐标来描述一个线性变换作用于一个抽象向量的过程;每当我们看到一个矩阵时,也都可以理解为是对线性空间(中元素的坐标)的一个线性变换。线性变换的矩阵表示推导过程如下:

考虑线性空间 V V V 中的一个元素(向量) v ⃗ \vec{v} v ,显然该向量可以由 { v 1 ⃗ , v 2 ⃗ . . . , v n ⃗ } \{\vec{v_1},\vec{v_2}...,\vec{v_n}\} {v1 ,v2 ...,vn } 和坐标联合进行唯一线性表示,即:

v ⃗ = ∑ 1 n k i v i ⃗ = [ v 1 ⃗ , v 2 ⃗ . . . , v n ⃗ ] [ k 1 k 2 ⋮ k n ] \vec{v} = \sum_1^n k_i\vec{v_i} = \begin{bmatrix}\vec{v_1},\vec{v_2}...,\vec{v_n}\end{bmatrix} \begin{bmatrix}k_1 \\k_2 \\\vdots \\k_n\end{bmatrix} v =1nkivi =[v1 ,v2 ...,vn ] k1k2kn

要确定一个线性变换 T T T,乍看起来,似乎需要把线性空间 V V V 中所有向量在 T T T 下的象全部找出来才行,事实上不必如此。因为 T T T 是线性变换(变换前后线性组合系数不变),而 V V V 中任一向量都可由基向量唯一线性表示,所以只要能够确定出 V V V 的基向量的象(即确定基向量的运动),则 V V V 中任一向量的象也就完全确定了。即下面公式所描述的:

T v ⃗ = T ( k 1 v 1 ⃗ + k 2 v 2 ⃗ + ⋯ + k n v n ⃗ ) = [ T v 1 ⃗ , T v 2 ⃗ , ⋯ , T v n ⃗ ] [ k 1 k 2 ⋮ k n ] T\vec{v}= T(k_1\vec{v_1}+k_2\vec{v_2}+\cdots+k_n\vec{v_n})= \begin{bmatrix}T\vec{v_1},T\vec{v_2},\cdots,T\vec{v_n}\end{bmatrix} \begin{bmatrix}k_1\\k_2\\\vdots\\k_n\end{bmatrix} Tv =T(k1v1 +k2v2 ++knvn )=[Tv1 ,Tv2 ,,Tvn ] k1k2kn

其中考虑 T v i ⃗ T\vec{v_i} Tvi :线性变换限定在线性空间 V V V 到自身,因此每一个 T v i ⃗ T\vec{v_i} Tvi 都可以由基 v 1 ⃗ , v 2 ⃗ . . . , v n ⃗ \vec{v_1},\vec{v_2}...,\vec{v_n} v1 ,v2 ...,vn 进行唯一线性表示,因此可以写为矩阵形式

[ T v 1 ⃗ , T v 2 ⃗ , ⋯ , T v n ⃗ ] = [ v 1 ⃗ , v 2 ⃗ , ⋯ , v n ⃗ ] [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ a n 1 a n 2 ⋯ a n n ] = [ v 1 ⃗ , v 2 ⃗ , ⋯ , v n ⃗ ] A \begin{bmatrix}T\vec{v_1},T\vec{v_2},\cdots,T\vec{v_n}\end{bmatrix} = \begin{bmatrix}\vec{v_1},\vec{v_2},\cdots,\vec{v_n}\end{bmatrix} \begin{bmatrix}a_{_{11}}a_{_{12}}\cdots a_{_{1n}}\\a_{_{21}}a_{_{22}}\cdots a_{_{2n}}\\\vdots \\a_{_{n1}}a_{_{n2}}\cdots a_{_{nn}}\end{bmatrix}= \begin{bmatrix}\vec{v_1},\vec{v_2},\cdots,\vec{v_n}\end{bmatrix} A [Tv1 ,Tv2 ,,Tvn ]=[v1 ,v2 ,,vn ] a11a12a1na21a22a2nan1an2ann =[v1 ,v2 ,,vn ]A
矩阵 A A A 称为线性变换 T T T 在基 { v 1 ⃗ , v 2 ⃗ . . . , v n ⃗ } \{\vec{v_1},\vec{v_2}...,\vec{v_n}\} {v1 ,v2 ...,vn } 下的矩阵。考虑线性变换后的向量 T v ⃗ T\vec{v} Tv :因此向量 T v ⃗ T\vec{v} Tv 利用原坐标 [ k 1 , k 2 , ⋯ , k n ] T [k_1,k_2,\cdots,k_n]^{T} [k1,k2,,kn]T 表示就为:
T v ⃗ = [ v 1 ⃗ , v 2 ⃗ , ⋯ , v n ⃗ ] A [ k 1 k 2 ⋮ k n ] T\vec{v} = \begin{bmatrix}\vec{v_1},\vec{v_2},\cdots,\vec{v_n}\end{bmatrix}A \begin{bmatrix}k_1\\k_2\\\vdots\\k_n\end{bmatrix} Tv =[v1 ,v2 ,,vn ]A k1k2kn
于是向量 T v ⃗ T\vec{v} Tv 在基 v 1 ⃗ , v 2 ⃗ . . . , v n ⃗ \vec{v_1},\vec{v_2}...,\vec{v_n} v1 ,v2 ...,vn 下的新的坐标为:
[ k 1 ′ k 2 ′ ⋮ k n ′ ] = A [ k 1 k 2 ⋮ k n ] \begin{bmatrix}k_1'\\k_2'\\\vdots\\k_n'\end{bmatrix} = A \begin{bmatrix}k_1\\k_2\\\vdots\\k_n\end{bmatrix} k1k2kn =A k1k2kn
综上我们证明了,对任何线性空间,选定线性空间的基后,我们对线性空间中的元素进行线性变换或线性运算时,只需用线性变换的矩阵右乘元素的坐标“向量”,即可得到线性变换后的元素(向量)的新坐标。因此可以把一个线性空间中针对元素的线性变换(向量之间的映射),转化为元素坐标之间的变换,并通过矩阵来描述这个变换。故在后面的内容中着重研究矩阵和坐标“向量”。可以证明:选定一个基后,一个线性变换和代表它的矩阵一一对应;注意根据上面推导,实际上在这个变换的过程中,选择的描述线性空间 V V V 的原始的基 v 1 ⃗ , v 2 ⃗ . . . , v n ⃗ \vec{v_1},\vec{v_2}...,\vec{v_n} v1 ,v2 ...,vn 不变。接下来要研究的是,如果我们看见了一个线性变换,那么这个线性变换的矩阵 A A A 应该如何求?

线性变换矩阵的计算 ⭐

矩阵和坐标是绑定在一起的术语。根据上面的推导过程,一个变换后的向量的新的坐标应该等于矩阵 A A A 乘以该向量变换前的坐标,考虑所有基向量变换后新的坐标和变换前坐标的关系,可以列一个 n 元方程组,从而应该可以计算出变换矩阵。以二维空间中的旋转这一线性变换为例,第一步选定标准单位正交基描述这个二维线性空间,如果逆时针旋转 θ \theta θ 角,则两个基向量的坐标有如下变换:
[ 1 0 ] → [ c o s θ s i n θ ] , [ 0 1 ] → [ − s i n θ c o s θ ] \begin{bmatrix} 1 \\ 0 \end{bmatrix} \rightarrow \begin{bmatrix} cos\theta \\ sin\theta \end{bmatrix} \quad , \quad \begin{bmatrix} 0 \\ 1 \end{bmatrix} \rightarrow \begin{bmatrix} -sin\theta \\ cos\theta \end{bmatrix} [10][cosθsinθ],[01][sinθcosθ]
方程组的矩阵形式则为:
[ c o s θ − s i n θ s i n θ c o s θ ] = A [ 1 0 0 1 ] \begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} =A \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} [cosθsinθsinθcosθ]=A[1001]

等式两边同时右乘 I − 1 I^{-1} I1,解得线性变换矩阵 A A A 为:
A = [ c o s θ − s i n θ s i n θ c o s θ ] A = \begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix} A=[cosθsinθsinθcosθ]
因此,我们就知道了线性变换作用下,一个线性变换后的向量新的坐标 x ′ = A x \boldsymbol{x'} = A\boldsymbol{x} x=Ax;而要想知道这个向量本身,只需用坐标和初始时选定且不变的描述这个二维线性空间的基(在这里是标准单位正交基)做线性组合即可.

线性变换及矩阵的值域和核

T T T 是线性空间 V n V^n Vn 上的一个线性变换:

  • C ( T ) = { T v ⃗ ∣ v ⃗ ∈ V n } C(T) = \{T\vec{v} \ |\ \vec{v} \in V^n\} C(T)={Tv   v Vn} 为线性变换 T T T 的值域;
  • N ( T ) = { v ⃗ ∣ T v ⃗ = 0 ⃗ , v ⃗ ∈ V n } N(T)=\{\vec{v} \ |\ T\vec{v}=\vec{0},\ \vec{v} \in V^n\} N(T)={v   Tv =0 , v Vn} 称为线性变换 T T T 的核;

因为选定基后,一个线性变换可以唯一地由一个矩阵来描述(反过来也成立,即一一对应),我们不妨用矩阵 A A A 来代替线性变换 T T T,那么我们称:

  • C ( A ) = { A x ∣ x ∈ R n } C(A) = \{A\boldsymbol{x} \ |\ \boldsymbol{x} \in R^n\} C(A)={Ax  xRn} 为矩阵 A A A值域,也称为矩阵 A A A 的列空间(Column Space); d i m ( C ( A ) ) dim(C(A)) dim(C(A)) 也称为矩阵 A A A
  • N ( A ) = { x ∣ A x = 0 , x ∈ R n } N(A)=\{\boldsymbol{x} \ |\ A\boldsymbol{x}=\boldsymbol{0},\ \boldsymbol{x} \in R^n\} N(A)={x  Ax=0, xRn} 称为矩阵 A A A,也称为矩阵 A A A 的零空间(Null Space); d i m ( N ( A ) ) dim(N(A)) dim(N(A)) 称为矩阵 A A A零度

关于列空间 C ( A ) C(A) C(A)、零空间 N ( A ) N(A) N(A) 下节也会详细涉及。线性代数基本定理:列空间 C ( A ) C(A) C(A) 的维数 + 零空间 N ( A ) N(A) N(A) 的维数 = 矩阵 A A A 的列数,即 d i m ( C ( A ) ) + d i m ( N ( A ) ) = n dim(C(A)) + dim(N(A)) = n dim(C(A))+dim(N(A))=n,注意到列空间的维数也就是矩阵 A A A 的秩 r ( A ) r(A) r(A)

线性变换中的相似矩阵

一个线性变换和代表它的矩阵一一对应吗?不是的,前提是首先要为这个线性空间选定一个基。因此,两个矩阵即使不同,但也有可能表示的是同一个线性变换!表示同一个线性变换的矩阵,我们称之为互为相似的矩阵。「相似矩阵」定义:设 A , B A,B A,B 是两个 n 阶矩阵,如果存在一个 n n n 阶非奇异(满秩)矩阵 P P P,使得 B = P − 1 A P B = P^{-1}AP B=P1AP,则称 A A A 相似于 B B B,记为 A ∼ B A\sim B AB.

🤣定理1 n n n 阶方阵 A A A B B B 相似的充要条件 A A A B B B 为同一线性变换在不同基下的矩阵。这一定理就是说,互为相似的矩阵,实际上代表同一个线性变换;只是由于选择描述线性空间的基不同,导致矩阵的形式不同🤣定理2:设同一个线性变换 T T T 在两个基 { v 1 ⃗ , v 2 ⃗ , ⋯ , v n ⃗ } \{\vec{v_1},\vec{v_2},\cdots,\vec{v_n}\} {v1 ,v2 ,,vn } { v 1 ′ ⃗ , v 2 ′ ⃗ , ⋯ , v n ′ ⃗ } \{\vec{v_1'},\vec{v_2'},\cdots,\vec{v_n'}\} {v1 ,v2 ,,vn } 的矩阵分别为 A A A B B B,且 [ v 1 ′ ⃗ , v 2 ′ ⃗ , ⋯ , v n ′ ⃗ ] = [ v 1 ⃗ , v 2 ⃗ , ⋯ , v n ⃗ ] C [\vec{v_1'},\vec{v_2'},\cdots,\vec{v_n'}] = [\vec{v_1},\vec{v_2},\cdots,\vec{v_n}]C [v1 ,v2 ,,vn ]=[v1 ,v2 ,,vn ]C ,则: B = C − 1 A C B = C^{-1}AC B=C1AC,即 A A A B B B 互为相似矩阵。证明如下:首先根据线性变换的矩阵表示,有
T [ v 1 ⃗ , v 2 ⃗ , ⋯ , v n ⃗ ] = [ v 1 ⃗ , v 2 ⃗ , ⋯ , v n ⃗ ] A T [ v 1 ′ ⃗ , v 2 ′ ⃗ , ⋯ , v n ′ ⃗ ] = [ v 1 ′ ⃗ , v 2 ′ ⃗ , ⋯ , v n ′ ⃗ ] B T[\vec{v_1},\vec{v_2},\cdots,\vec{v_n}] = [\vec{v_1},\vec{v_2},\cdots,\vec{v_n}]A \\ T[\vec{v_1'},\vec{v_2'},\cdots,\vec{v_n'}]=[\vec{v_1'},\vec{v_2'},\cdots,\vec{v_n'}]B \\ T[v1 ,v2 ,,vn ]=[v1 ,v2 ,,vn ]AT[v1 ,v2 ,,vn ]=[v1 ,v2 ,,vn ]B
结合条件,有:
T [ v 1 ′ ⃗ , v 2 ′ ⃗ , ⋯ , v n ′ ⃗ ] = [ v 1 ′ ⃗ , v 2 ′ ⃗ , ⋯ , v n ′ ⃗ ] B = [ v 1 ⃗ , v 2 ⃗ , ⋯ , v n ⃗ ] C B T [ v 1 ′ ⃗ , v 2 ′ ⃗ , ⋯ , v n ′ ⃗ ] = T [ v 1 ⃗ , v 2 ⃗ , ⋯ , v n ⃗ ] C = [ v 1 ⃗ , v 2 ⃗ , ⋯ , v n ⃗ ] A C T[\vec{v_1'},\vec{v_2'},\cdots,\vec{v_n'}] = [\vec{v_1'},\vec{v_2'},\cdots,\vec{v_n'}]B = [\vec{v_1},\vec{v_2},\cdots,\vec{v_n}]CB \\ T[\vec{v_1'},\vec{v_2'},\cdots,\vec{v_n'}] = T[\vec{v_1},\vec{v_2},\cdots,\vec{v_n}]C = [\vec{v_1},\vec{v_2},\cdots,\vec{v_n}]AC \\ T[v1 ,v2 ,,vn ]=[v1 ,v2 ,,vn ]B=[v1 ,v2 ,,vn ]CBT[v1 ,v2 ,,vn ]=T[v1 ,v2 ,,vn ]C=[v1 ,v2 ,,vn ]AC
所以:
C B = A C , 即  B = C − 1 A C CB = AC, 即\ B = C^{-1}AC CB=AC, B=C1AC

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Pandas | 理性判断数据是否存在缺失值的一种方法

理性判断 一般思路进一步思考df[B].explode() 一般思路 tcc.info()上述信息info显示没有缺失值 但是真实的情况还是要根据业务实际分析tcc.isnull().sum() # 和tcc.info()作用和tcc.info() 其实是一样的 进一步思考 在此过程中,我们需要检验是否存在采用别的值来表…

leetcode 382.链表随机结点

1.题目要求: 2.题目代码: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x)…

Java Development Kit (JDK) 详解

什么是 JDK? JDK 是 Java Development Kit 的缩写,是一组用于开发 Java 应用程序的软件开发工具和库的集合。JDK 包含了 Java 运行时环境(JRE)和 Java 虚拟机(JVM),以及一系列开发工具和库。 …

【5.8】指针算法-双指针验证回文串

一、题目 给定一个字符串,验证它是否是回文串, 只考虑字母和数字字符 ,可以忽略字母的大小写。 说明: 本题中,我们将空字符串定义为有效的回文串。 示例 1: 输入: "A man , a plan , a canal : Panama " 输…

多功能 Web 应用渗透测试系统

系统简介 本项目命名为SecurityEye,是一款基于 Python-Django 的多功能 Web 应用渗透测试系统,包含漏洞检测、目录识别、端口扫描、指纹识别、域名探测、旁站探测、信息泄露检测、网站权重探测等功能。 项目功能 本系统通过旁站探测、域名探测、、域名…

libstdc++/so.6: version ‘GLIBCXX_3.4.29‘ not found (required by

matlab使用过程中提示库文件版图过低,如图 1. 网上或者其他eda的工具目录里面找一个libstdc.so.6.29文件,里面包含了glibcxx3.4.29 2. 复制文件到/usr/lib64目录下面 3. libstdc.so.6连接到新的库文件 unlink libstdc.so.6 ln -s libstdc.so.6.0.29 l…

有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 基础使用先平方&#xff0c;后排序的思想 class Solution {public int[] sortedSquares(int[] nums) {for(int i0;i<nums.length;i){nums…

flutter 专题七 Flutter面试之渲染流程

一、 简介 Flutter面试中必问的一个面试题就是渲染相关的话题。作为Google在2018年发布的一款跨平台UI框架&#xff0c;使用Dart作为其开发语言&#xff0c;底层使用Skia图形库进行视图渲染&#xff0c;渲染速度和用户体验堪比原生。 二、Flutter渲染流程 总的来说&#xff…

深入理解 TCP 的握手与挥手机制:为何握手 3 次,挥手 4 次?

在网络通信的世界里&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种非常重要的协议&#xff0c;它确保了数据在网络中的可靠传输。而 TCP 的连接建立&#xff08;握手&#xff09;和连接断开&#xff08;挥手&#xff09…

Python-数据爬取(爬虫)

在数据驱动的时代&#xff0c;Python以其强大的数据处理能力和丰富的库资源&#xff0c;成为数据爬取的首选语言。通过Python&#xff0c;你可以轻松地从网页中抓取所需的数据&#xff0c;无论是价格信息、新闻内容还是用户评论&#xff0c;都能一一收入囊中。使用requests库发…

基于51单片机水位监测控制报警仿真设计

基于51单片机水位监测控制报警仿真设计 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接资料下载链接&#xff1a; 基于51单片机水位监测控制报警仿真设计( proteus仿真程序设计报告讲解视频&#xff09; …

JavaFX在Linux aarch64上运行

1.适配Jdk Linux开发项目安装在麒麟系统&#xff0c;无法安装&#xff0c;经查询因cpu架构不同导致无法运行 https://www.oracle.com/sg/java/technologies/downloads/#java21 该链接可下载jdk21,Linux aarch64版本。 2.适配Javafx模块 替换jdk之后&#xff0c;JavaFX仍无…

3D区块多重渐变围栏

这里主要用到的就是threejs的shader&#xff0c;至于其他知识点&#xff0c;可以参考json生成3d区域 下面的主要代码&#xff1a; import * as THREE from three; import { OrbitControls } from three/addons/controls/OrbitControls.js import { EffectComposer } from th…

【NLP】使用 SpaCy、ollama 创建用于命名实体识别的合成数据集

命名实体识别 (NER) 是自然语言处理 (NLP) 中的一项重要任务&#xff0c;用于自动识别和分类文本中的实体&#xff0c;例如人物、位置、组织等。尽管它很重要&#xff0c;但手动注释大型数据集以进行 NER 既耗时又费钱。受本文 ( https://huggingface.co/blog/synthetic-data-s…

Git代码托管(三)可视化工具操作(1)

常见的可视化操作工具有 一、官方网页 如码云、gitlab&#xff0c;自带了常见的git操作。 以码云为例&#xff1a; 1、创建分支&#xff1a; 进入分支目录&#xff0c;点击 新建分支 按钮&#xff0c; 在弹出框中输入新分支名称&#xff0c;点击确定即可一键创建分支&…

STL学习-无序容器-unordered set和unorderde multiset

1.定义及初始化 #include <unordered set> #include <iostream> using namespace std; //输出s中的所有元素 template<typename T> void Show(const T& s) { for(auto&x:s) cout << x<<" ";cout << endl; } int main()…

鸿蒙(Harmony)实现滑块验证码

在Android和ios两端已经使用的滑块验证码框架还未适配鸿蒙版&#xff0c;于是需要自己去实现类似如下的滑块验证码&#xff1a; 那么实现这样的验证码主要涉及到几个内容&#xff1a; 1、自定义弹窗 2、base64图片转换 3、滑动组件与滑块的联动&#xff0c;以及横移距离转换…

《华为工作法》读书摘记

无论做什么事情&#xff0c;首先要明确的就是做事的目标。目标是引导行动的关键&#xff0c;也是证明行动所具备的价值的前提&#xff0c;所以目标管理成了企业与个人管理的重要组成部分。 很多时候&#xff0c;勤奋、努力并不意味着就一定能把工作做好&#xff0c;也并不意味…

三维测量与建模笔记 - 3.3 张正友标定法

上图中&#xff0c;提到了世界坐标系在张正友标定法中的设计&#xff0c;可以理解为将世界坐标系的原点放到了棋盘格左上角点的位置&#xff0c;并且棋盘格平面上所有点的Z为0&#xff0c;将Z规定为0的话&#xff0c;可以简化掉一个维度&#xff08;列向量r3&#xff09;。去掉…

【课程总结】day34:多模态大模型之ViT模型、CLIP模型论文阅读理解

前言 在【课程总结】day31&#xff1a;多模态大模型初步了解一文中&#xff0c;我们对多模态大模型的基本原理有了初步了解&#xff0c;本章内容将通过论文阅读理解&#xff0c;更进一步理解多模态大模型中所涉及的 Vit 架构、Transformer在视觉应用的理念以及 Clip图像与文本…