精华内容
下载资源
问答
  • 有人能告诉么? ===================== 补充一下,知道什么是相似矩阵,也知道其各种数学原理,但是不明白这东西到底有什么。换句话说,想知道这东西在现实中能做什么。 比如,去...

    做论文需要用相似矩阵评估一个聚类模型。我不需要知道其数学原理,只要知道这东西是干什么用的。有人能告诉我么?
    =====================
    补充一下,我知道什么是相似矩阵,也知道其各种数学原理,但是我不明白这东西到底有什么用。换句话说,我想知道这东西在现实中能做什么。

    比如,我去买菜,我可以用多元回归,分析出菜价和汽油价格成正比,那么油价涨了这几天,我知道菜价也会涨。我是想知道这样一个应用

     

    默认排序​

    马同学

    马同学

    看图学数学,公众号:matongxue314

    1,543 人赞同了该回答

    相似矩阵的定义是:

     A,B 都是 n 阶矩阵,若有可逆矩阵 P ,使 P^{-1}AP=B 则称 B  A 的相似矩阵,或说 A  B 相似。----《线性代数》同济版

    让我们从通俗解释开始。

    1 通俗解释

    今天《雷神3》上映了,我坐在第一排看电影:

    而你坐在最后一排看电影:

    我们看的是同一部电影,但是我们各自眼中看到的电影却因为位置不同而有所不同(比如清晰度啊、角度啊),所以说,“第一排看到的电影”和“最后一排看到的电影”是“相似”的。

    那么相似矩阵走进的电影院,放映的是哪部电影?也就是说,什么是不变的呢?

    是线性变换。

    2 线性变换

    什么是线性变换?让我们从函数说起。

    2.1 线性函数

    函数我们很早就接触了,直观地讲,就是把 x 轴上的点映射到曲线上(下面是函数y=sin(x) ,把 x 轴上的点映射到了正弦曲线上):

    还有的函数,比如 y=x ,是把 x 轴上的点映射到直线上,我们称为线性函数:

    2.2 从线性函数到线性变换

    线性函数其实就是线性变换,为了看起来更像是线性变换,我换一种标记法。

    比如之前的 y=x ,我们可以认为是把 (a,0) 点映射到 (0,a) 点,我们称为线性变换T ,记作:

    T:(a,0)\to (0,a),a\in \mathbb {R},b\in \mathbb {R}\\

    不过按照这个写法,作图就有点不一样了:

    矩阵的形式很显然如下:

    \begin{pmatrix} 0 \\ a \end{pmatrix}=\begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}\begin{pmatrix} a \\ 0 \end{pmatrix}\\

    这样做最直接的好处是,我们可以轻易的摆脱 x 轴的限制。

    只要替换 (a,0) 为平面内所有的点 (a,b) ,我们就可以对整个平面做变换,该线性变换记作:

    T:(a,b)\to (b,a)\\

    进而可以写作矩阵的形式:

    \begin{pmatrix} b \\ a \end{pmatrix}=\begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}\begin{pmatrix} a \\ b \end{pmatrix}\\

    为了示意整个平面的点都被变换了,我用下面的淡蓝色网格来表示这个线性变换(这个变换实际上镜面反转,为了方便观察增加一个参考点 \vec{x_{}} 以及虚线表示的反转对称轴):

    我们记:

    \vec{y_{}}=\begin{pmatrix} b \\ a \end{pmatrix}\qquad \vec{x_{}}=\begin{pmatrix} a \\ b \end{pmatrix}\qquad A=\begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}\\

    我们可以得到更简便的记法(这种形式看起来也更像线性方程 y=ax ):

    \vec{y_{}}=A\vec{x_{}}\\

    反正 \vec{y_{}},\vec{x_{}} 都是指代的平面上所有的点,我们干脆更简化点,认为:

    而 y=x 不过是这个 A 的一种特殊情况。

    2.3 矩阵 A 与基

    慢着!刚才的结论其实是不完整的,我们还少了一个信息。

    y=x 是基于直角坐标系的,通过这个转换:

    y=x\to A=\begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}\\

    得到的 A 也是基于直角坐标系的。

    只是在线性变换中,我们不称为直角坐标系,我们叫做标准正交基。

    标准正交基是 \{ \vec{i_{}}=\begin{pmatrix} 1 \\ 0 \end{pmatrix},\vec{j_{}}=\begin{pmatrix} 0 \\ 1 \end{pmatrix}\} ,它们所张成的线性空间如下(关于这幅图画的解释,可以参考 如何理解矩阵乘法? ):

    A 在此基下,完成了镜面反转这个线性变换:

    因此,让我们补完之前的结论:

    看到这个结论,可能你会想,难道还可以在别的基下?在别的基下是什么情况啊?

    好,终于到了我们本文的重点了。

    3 相似矩阵

    知道了线性变换,让我们回到文章开头就给出的隐喻,看电影。

    线性变换就是电影院中播放的电影,不同的基坐在不同的位置观看:

    同一部“电影”,不同基“看到”的就是不同的矩阵:

    那怎么得到不同基下的矩阵呢?让我们来看看变换的细节。

    3.1 细节

    先上一张图,说明不同基下的矩阵的变换思路,这个图有点复杂,请参照之后的解释一起来看:

    下面是对图的解释:

    • 有两个基: V_1:\{ \vec{i_{}},\vec{j_{}}\} 和 V_2:\{ \vec{i'},\vec{j'}\}
    • V1\to V2 ,可以通过 P^{-1} 转换
    • V2\to V1 ,可以通过 P 转换

    整个转换的核心,就是上图正中的文字:

    解释下:

    • \vec{v'} 是 V2 下的点
    • \vec{v'} 通过 P 变为 V1 下的点,即 P\vec{v'}
    • 在 V1 下,通过 A 矩阵完成线性变换,即 AP\vec{v'}
    • 通过 P^{-1} 从变回 V2 下的点,即 P^{-1}AP\vec{v'}

    综上,我们可以有:

    B\vec{v'}=P^{-1}AP\vec{v'}\\

    我们可以认为:

    B=P^{-1}AP\\

    那么 B 和 A 互为相似矩阵。

    那就还有一个细节了, V2\to V1 的转换矩阵 P ?

    这个问题不复杂,只是坐标换来换去的,我尽量讲清楚。

    首先我们给出空间中的一点,比如说 m 点吧:

    相信大家可以理解,不论有没有基,这个点都是客观存在的。

    然后,我们给出 m 点在 \vec{i'},\vec{j'} 的坐标 \vec{v'} :

    为了表示 \vec{v'} 是 \vec{i'},\vec{j'} 下的坐标,我们写成这样:

    \vec{v'}=\begin{pmatrix} a \\ b \end{pmatrix}=a\vec{i'}+b\vec{j'}\\

    如果我们知道了 \vec{i'},\vec{j'} 在 \vec{i},\vec{j} 下的坐标:

    那么有:

    \begin{align*} \vec{v'} & = a\vec{i'}+b\vec{j'}\\ & = a(c\vec{i}+d\vec{j})+b(e\vec{i}+f\vec{j}) \end{align*}\\

    此时,实际上 m 点的坐标,已经变到了 \vec{i},\vec{j} 下的 \vec{v} :

    坐标已经转换了,继续往下推:

    \begin{align*} \vec{v} & = a(c\vec{i}+d\vec{j})+b(e\vec{i}+f\vec{j})\\ & = \begin{pmatrix} c & e \\ d & f \end{pmatrix}\begin{pmatrix} a \\ b \end{pmatrix}\\ & = \begin{pmatrix} \vec{i'} & \vec{j'} \end{pmatrix}\vec{v'} \\ & = P\vec{v'} \end{align*}\\

    所以 P 其实就是:

    P=\begin{pmatrix} \vec{i'} & \vec{j'} \end{pmatrix}\\

    要记得啊,上面的 \vec{i'},\vec{j'} 是在 \vec{i},\vec{j} 下的坐标。

    这里面稍微复杂点的就是,转换的时候要想清楚到底是在哪个基下!

    为什么我们需要相似矩阵呢?我们来看看熟悉的极坐标。

    3.2 极坐标

    比如我把直角坐标系( xy 坐标系)的圆方程换元为极坐标( \rho \theta 坐标系)下:

    x^2+y^2=a^2\implies \begin{cases} \rho =a\\ \theta \in \mathbb {R}\end{cases}\\

    图像也从左边变为了右边:

    换元之后是不是代数式和图像都变简单了。

    相似矩阵的目的也是为了找到更简单的坐标系。

    那么什么叫作简单的坐标系呢?

    3.3 对角矩阵

    比如这个 A 矩阵:

    A=\begin{pmatrix} 2 & -1 \\ -1 & 2 \end{pmatrix}\\

    可以这样分解:

    B=P^{-1}AP=\begin{pmatrix} 3 & 0 \\ 0 & 1 \end{pmatrix}\\

    其中 P=P^{-1}=\begin{pmatrix} -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \cr \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} \end{pmatrix}

    B 就是对角矩阵,看上去就很清爽,我认为这个就是简单的坐标系。

    关于这方面更多的可以参看, 特征值、特征向量

    编辑于 2017-11-13

    ​赞同 1.5K​​178 条评论

    ​分享

    ​收藏​感谢收起​

    芥川倞

    芥川倞

    只懂点皮毛 / INFJ

    13 人赞同了该回答

    想到结论应该放在开头,不然别人没耐心看…结论是:为了对角化矩阵以用于“矩阵幂级数”的计算。详见下文。

    -----------------------------------------

    首先矩阵的内涵很丰富,在不同的背景下代表的问题不同,比如可以用来讨论线性方程组,可以用来讨论二次型,还可以用来讨论“线性变换”…而各个领域背景下的矩阵,代表的意义其实很不相同,很多学线性代数或高等代数的同学,如果没想通这一点,那就等着糊涂去吧...

     

    那么说到“相似”这个概念源自哪里、最初属于哪一个背景谈论的概念:是“线性变换”。
    而“线性变换”的内涵也很丰富(指线性空间到自身的线性映射),是“一类”运算的抽象。大家知道有很多运算都可以归类于线性运算,比如说常微分方程——求导就是线性运算——

     

    而若把该运算作用的对象集体看作“向量”组成一个“线性空间”(常微分方程背景下的“函数”),

    运算(求导运算,不只有一阶导 还可以是一阶二阶n阶导多少倍求和 是一个“算符”的概念)看作是对整个空间作用的一个“线性变换”,

    接下来是令人惊奇的事——我们都知道空间中的对象(“向量”)可以选择一组基,从而用一个向量来表示 (唉…都是“向量”但意思不一样…前面指的是客观存在的那个对象,后面指的就是一组数排列成的“坐标”…一定要理解没有基是不存在后者意义的向量的,任何一个坐标向量,必暗含选定了一组基)

    …好,那么令人惊奇的事是什么呢?
    我们用一组基能表示这个空间里的对象没问题吧…因为“基”本身也是对象啊!只不过是被选出来作为表示其他对象的“代表”罢了;

    可是如果我说,这个“线性变换”也能用这组基来表示,你会不会感到很惊奇?我第一次理解的时候反正是震惊了…太美妙太神奇了。

     

    简单说一下操作吧…大概懂的能听明白,不懂的也听不明白 。

    就是因为
    ①这个线性变换是作用于空间中所有对象的,所以自然也作用于基;
    ②基是可以表出空间中所有对象的,所以自然也可以表出经过线性变换作用后(根据线性变换的定义:仍在该空间里)的对象的

    于是我们把“每一个”基向量被这个线性变换作用后得到的变换向量,再用同一组“整组基”表示出来,就可以用一个矩阵表示一个变换啦!!【严格一一对应的证明请参见教材】

    这种对应就像向量和坐标向量的对应一样,只不过“运算”变成了“二维”,着实叹为观止。

     

    能看到这的大概不多…觉得我跑题甚严重…不,你要想理解,不费点功夫就能理解的话,不早就出现在教科书上了么?世之奇伟、瑰怪,非常之观,常在于险远~

    好了回到主题,换一组基,就可以把我们“算符”用矩阵表示的形式变得简单,像首赞马同学说的那样,没错:对角阵!

    【换基之后空间中每一个向量的坐标会以新基为标准发生改变,同样地,同一个线性变换的矩阵也会以新基为标准发生改变,改变前后的关系,就是“相似”。
    一句话:线性变换在换基前后的矩阵的关系叫做“相似”。
    注意:正如向量坐标依赖于基的选择一样,“线性变换的矩阵”也是依赖于基的选择的,因为这个矩阵就像坐标,坐标是坐标,不是对象本身】

    也就是说,只要“适当地”选择一组基,我们可以让该(非退化的)线性变换的矩阵“在该组基下”是对角阵。

     

    说实在的,这大概是相似最大的一个功能了。在上面提到的(线性运算背景的)实际运算中,那些问题可以最终化归为某种形式的矩阵的运算。

    而这些矩阵运算中很重要的便是 
    \sum_{n=1}^{\infty}{k_n\cdot A^n} 这样的矩阵幂级数 (其中 k_n 为常数系数)

    这个怎么做?
    如果A是对角阵,好做吧?
    那如果不是对角阵怎么破?
    ——利用相似,化成对角阵!
    这就是传说中的“对角化方法”计算幂级数。

     

    具体来说若找到了可逆矩阵P,使得
    D=P^{-1}AP ,其中D是对角阵,那么…


    A^n=(PDP^{-1})^n=
    =PDP^{-1}PDP^{-1}...PDP^{-1}

     

    根据矩阵乘法结合律,中间相邻的 P^{-1}P 都可以消掉,于是就剩下了开头和末尾的,以及中间的n个D:
    A^n=PD^{n}P^{-1}

    【P有求法的,其实是换基的过渡矩阵;求法就是先求特征值然后解出特征向量的那一套,最后把特征向量作为“列”排排站就是P】

     

    代回到幂级数就得:
    \sum_{n=1}^{\infty}{k_n\cdot A^n}=\sum_{n=1}^{\infty}{k_n\cdot (PD^{n}P^{-1})}

    利用矩阵乘法分配律把可以收尾提出来:


    \sum_{n=1}^{\infty}{k_n\cdot A^n}= P(\sum_{n=1}^{\infty}{k_n\cdot D^n)P^{-1}} 【最终结果】

    厉害吧![\吐舌],

    我们需要做的只是求出特征值(以组成对角阵D) 以及特征向量(对应特征值组成P)而已。

     

    当然了,如果还有有心的童鞋继续问:为什么矩阵的幂级数重要呢?

    那么这个问题,我以问作答:为什么在函数项级数中,幂级数重要呢?

    一个道理 ; )

    编辑于 2017-11-16

    ​赞同 13​​5 条评论

    ​分享

    ​收藏​感谢收起​

    TheNewE

    TheNewE

    眼球自闭症/吃货/想做AI/来喝杯coffee吧

    24 人赞同了该回答

    建议你看一下孟岩的老三篇《理解矩阵》,
    还有科学空间版的六篇《新理解矩阵》

    分割线

    现在有更好的东西了,b站上3blue1brown的熟肉,线性代数的直观理解

    编辑于 2017-01-08

    ​赞同 24​​1 条评论

    ​分享

    ​收藏​感谢

    王潜升

    王潜升

    11 人赞同了该回答

    相似矩阵就是同一个线性变换在不同坐标基下的对应矩阵

    编辑于 2017-10-11

    ​赞同 11​​添加评论

    ​分享

    ​收藏​感谢

    蜂鸟

    蜂鸟

    云雀叫了一整天

    16 人赞同了该回答

    学线性代数时曾经看过人人网一篇文章,里面大致意思:矩阵的本质是运动的描述,那么用微积分来表达就是反应线性空间里的各种变换。对于线性变换选一组基就可以找一个矩阵来表达它,换一个基就可以用另一个矩阵来表达,如何判定这两个矩阵描述的是同一个线性变换呢?如何判定不同位置的人看到的电影屏幕画面是同一个电影?不同角度画的瓷器素描是否是同一个瓷器?两张照片一张特写猪屁股一张注重猪头,这两照片照的是同一只猪吗?这时相似矩阵就来了,如果得出是相似矩阵,那么我们就肯定同一个电影同一件瓷器照的同一只猪。
    所以一句人话解释:相似矩阵来判断这一堆是否同一个东西或者同一个东西可以用哪些视角来看,我们选一个看起来最舒服的视角。比如一场空战,一份资料是基地指挥雷达上各个点的移动,一份是参战飞机自带摄像机的摄像,指挥官战后分析阵型肯定用前者,分析双方战斗素质等等肯定适合用后者。
    我觉得学这玩意能看懂这个就行了

    发布于 2017-05-28

    ​赞同 16​​2 条评论

    ​分享

    ​收藏​感谢收起​

    王晨

    王晨

    游戏程序员,航空航天初级爱好者

    132 人赞同了该回答

    强势来答一波。推荐一个视频课程,叫做《线性代数的本质》来自 3Blue1Brown,绝壁秒杀"国产公式手册"级别的线性代数教材。

    相信我,他会改变你对线性代数的根本性理解。

    下面是B站视频链接

    哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili

     

    PS:原答案“秒杀”一词居然引战了,数学爱好者们果然严谨啊。我就表达一下情感而已。

    编辑于 2017-11-10

    ​赞同 132​​32 条评论

    ​分享

    ​收藏​感谢

    Tam Alex

    Tam Alex

    三流大学讲师_四十三流吉他手

    6 人赞同了该回答

    说实话没看明白题主想问什么。。。

     

    相似变换我见过最多的应用就是特征值分解。也就是构造一个变换矩阵(特征向量阵),找到一个相似对角阵(特征值对角阵)。

     

    对一个矩阵进行特征值分解,得到它的特征值对角阵和特征向量矩阵,那么这个矩阵的所有性质不就明了了吗。

    把矩阵看成线性变换的话,这个变换的方向,各方向上变换的大小(尺度)都一目了然。

     

    然后像主成分分析啊、能观性能控性分析啊在此基础上就能够很容易的开展了。

     

    所以题主不说怎么评估模型,我也不知道怎么进行下一步应用了。。。

    发布于 2017-06-10

    ​赞同 6​​添加评论

    ​分享

    ​收藏​感谢

    青春

    青春

    微信公众号:隔壁小王的睡前故事

    15 人赞同了该回答

    咱不扯什么线性变换,就从矩阵本身来说。
    线性代数整个在干的事就是在各种意义下分类矩阵。没错,就这么回事,分类---分门别类。

    这里“各种意义”是什么意思呢?如果你对数学比较熟悉的话,当我说到“分类”这个词时,你就肯定会想到另一个词“等价关系”。一种等价关系决定一种分类方法,反过来说也对。

    相似就是一种等价关系,线代书上想必都是证明过这个结论的。所以,我们就可以愉快的用相似来对各种各样的矩阵进行分类啦。把所有相似的矩阵都给我放到一块,它们里面随便拿哪个出来都可以作为这一个类的代表,那我们当然就想找一个看着养眼(比较漂亮(๑> <๑))的矩阵来代表这个类啦。这个比较漂亮的矩阵就叫标准型,我们加上修饰语“相似”,就变成了相似标准型,没错,它就是我们早就知道的若尔当标准型。一个类里的矩阵必然有很多共性(不是一家人,不进一家门嘛),如前面有答主说的,迹啊,特征值啊,不变因子啊…很多东西都是相等的,这些叫作这个等价关系下的不变量。如果我们把这些不变量找全(或者其中起决定性的某几个不变量)了,那么根据不变量就能轻松识别哪些矩阵是相似的了。

    其他的一些矩阵之间的关系也都可以作类似理解,例如相抵,合同等,就是从不同角度对矩阵分类…

    现在回答题主问题,相似能用来干嘛?很简单嘛,能用来分类啊(咦,好像是废话…)面对纷繁复杂的世界,我们能做的不就是分类吗!

    其实学到现在的数学,我越来越觉得很多数学本质上都是在做分类工作 →_→

    欢迎指正|ω・)

    编辑于 2017-05-26

    ​赞同 15​​4 条评论

    ​分享

    ​收藏​感谢

    DMY

    DMY

    学生

    6 人赞同了该回答

    相似矩阵用途,就是把一个矩阵化简,让这矩阵的特点更加突出,找到这类矩阵相应的特征。比如说亚洲人的外貌,对个体来讲,每个亚洲人外貌特点都不一样,但可以通过相似比较得出,亚洲人特征是 黄皮肤,黑头发。
    你的论文用聚类 可能是想看看先提取矩阵的特征,然后比较这些特征的相似性,相似度高的作为一类。

    发布于 2012-09-28

    ​赞同 6​​添加评论

    ​分享

    ​收藏​感谢

    Yuanning

    Yuanning

    Mind reader

    45 人赞同了该回答

    用通俗语言来讲,相似矩阵的用途,就是所谓把一个一般形式的新问题转化为一个已被解决过的“规范”问题,就像求解一元二次代数方程的时候我们把它化成一般形式然后套用求根公式一样。

    对于相似矩阵的数学解释可以参考任意一本线性代数课本。相似矩阵可以视作同一个线性变换在不同基上的不同形式。
    若两个矩阵相似,则这两个矩阵具有秩相等,行列式相等,迹相等,初等因子相等,特征值相等,特征多项式相等,等等一些很好的特性。所以当我们研究一个一般形式的矩阵的时候,如果可以找到与它相似的一些标准形式,就可以将任意矩阵的问题转化为一些固定形式的问题。比如对于可对角化的矩阵,可以研究与其相似的对角阵;对于一般的复数域上的矩阵,都可以转化为Jordan标准型。因为这些标准型具备与原矩阵相同的很多特性,而由于标准型的形式比较特殊,其特性更易于研究,并且由于标准型的形式是固定的,对其各种特性的研究有固定的套路可循。

    编辑于 2012-09-27

    ​赞同 45​​3 条评论

    ​分享

    ​收藏​感谢

    Peter Yin

    Peter Yin

    码农万岁

    8 人赞同了该回答

    用一句话来回答吧,相似矩阵就是两个坐标系统对同一个线性关系的刻画,而其中的矩阵P就是两个坐标体系的变换矩阵

    发布于 2017-05-26

    ​赞同 8​​1 条评论

    ​分享

    ​收藏​感谢

    洪武ea

    洪武ea

    学有机的吃货

    2 人赞同了该回答

    群的两个矩阵表示同构,当且仅当对应的矩阵相似,当然,它们也都同构于某个线性表示

    编辑于 2017-10-12

    ​赞同 2​​3 条评论

    ​分享

    ​收藏​感谢

    Hu组织

    Hu组织

    理科宅

    4 人赞同了该回答

    矩阵相似意义如其他答案所说:若A表示某线性变换,B表示同一线性变换在另一组基下的表示,则A和B的关系就是A=M-1BM。M就是那组新基 BM表示B对基M做线性变换; M-1左乘一个向量表示将该向量换算成以M为基表现的形势

    发布于 2017-03-16

    ​赞同 4​​1 条评论

    ​分享

    ​收藏​感谢

    幻想曲

    幻想曲

    教师、科研人员

    37 人赞同了该回答

    要理解相似矩阵,首要要知道矩阵代表的是线性变换。虽然我们可以直接去研究矩阵的一些特性,但我们其实可以这样说:
    矩阵就是线性变换! 矩阵就是线性变换! 矩阵就是线性变换!
    (注:虽然咱们很多课本都是先介绍的矩阵再介绍的线性变换,但是很多经典的线性代数课本都是先介绍的线性变换,再引入的矩阵对其的描述,因为有了矩阵线性变换表示起来就方便了。)

    而两个相似的矩阵的定义简单说就是:同一个线性变换的不同矩阵表示形式
    可是为什么变换相同,而矩阵却不一样呢?原因就是线性空间中的一个很基本的概念—线性空间的基。注意同一个向量在不同的基下表示形式不一样,所以同一个线性变换在不同的基下矩阵的表示也就会不一样。用一个例子来表示吧。

    例子:我们先找一个线性变换f(\left( \begin{array}{ccc}  x  \\  y  \end{array} \right) ) = \left( \begin{array}{ccc}  x + 2y \\  y  \end{array} \right)
    比如f(\left( \begin{array}{ccc}  1  \\  1  \end{array} \right) ) = \left( \begin{array}{ccc}  3 \\  1  \end{array} \right)
    下面我们给出描述这同一个线性变换的两个相似的矩阵。前面说了,我们同时也要给出两个不同的基:

    第一个基:B=<\left( \begin{array}{ccc}  1  \\  0  \end{array} \right), \left( \begin{array}{ccc}  0  \\  1  \end{array} \right) >,相应的矩阵为:T1=\left( \begin{array}{cc}  1  & 2\\  0  & 1\end{array} \right)
    用矩阵来计算线性变换分两步:
    (1) 先将要变换的向量变成相应的基下的坐标形式,比如\left( \begin{array}{ccc}  1 \\  1  \end{array} \right)在基B(因为B是自然基)下的的坐标还是\left( \begin{array}{ccc}  1 \\  1  \end{array} \right),所以可以直接使用;
    (2) 将要变换的向量左乘这个矩阵。
    试一下:f(\left( \begin{array}{ccc}  1  \\  1  \end{array} \right) ) = \left( \begin{array}{ccc}  1 & 2 \\  0  & 1\end{array} \right) \left( \begin{array}{ccc}  1  \\  1  \end{array} \right) = \left( \begin{array}{ccc}  3  \\  1  \end{array} \right) 。

    第二个基:D=<\left( \begin{array}{ccc}  0  \\  1  \end{array} \right), \left( \begin{array}{ccc}  1  \\  1  \end{array} \right) >,相应的矩阵为:T2=\left( \begin{array}{cc}  -1  & -2\\  2  & 3\end{array} \right)
    至于T2是怎么求的,这里省略。
    下面我们就来验证一下,T2描述的还是线性变换f。
    首先我们还是来看向量\left( \begin{array}{ccc}  1 \\  1  \end{array} \right)在基D下的坐标,通过计算得到\left( \begin{array}{ccc}  0 \\  1  \end{array} \right),然后我们左乘:f(\left( \begin{array}{ccc}  1  \\  1  \end{array} \right) ) = \left( \begin{array}{ccc}  -1 & -2 \\  2  & 3\end{array} \right) \left( \begin{array}{ccc}  0  \\  1  \end{array} \right) = \left( \begin{array}{ccc}  -2  \\  3  \end{array} \right)
    为什么结果不对? 原因就是\left( \begin{array}{ccc}  -2  \\  3  \end{array} \right)还是在D下的坐标,我们在把它转变为自然基下的表示形式,这里因为要验证,所以写一下步骤:
    -2 \left( \begin{array}{ccc}  0  \\  1  \end{array} \right) + 3 \left( \begin{array}{ccc}  1  \\   1 \end{array} \right) = \left( \begin{array}{ccc}  3  \\  1  \end{array} \right)
    这里我们完全是为了写的方便,所以才用一个具体的向量\left( \begin{array}{ccc}  1 \\  1  \end{array} \right),其实完全可以用符号比如x和y来验证一般的形式,从而确定两个矩阵的确表示的是同一个线性变换。

    这样我们就验证了:T1和T2是相似的,表示的都是f这个线性变换。

     

    既然那么多矩阵表示的都是同一个线性变换,为什么要找那么多呢?原因就是有些矩阵的形式比较简单,观察或者计算比较方便。所以也就会引出特征值、对角化等的概念了,这里就不说了。

    .

    编辑于 2016-08-08

    ​赞同 37​​1 条评论

    ​分享

    ​收藏​感谢收起​知乎用户

    知乎用户

    2 人赞同了该回答


    考研做的笔记。简单来说就是,n维向量空间有一组基P(不一定是正交的)某在绝对坐标系下表示的向量Y在P下的坐标是X,则Y经过某线性变换A变换后的新向量AY在P下的新坐标X¹=BX,其中B是A的相似矩阵,B=P-1AP。(慢慢地我已经把线性变换的概念融入到线性代数的理解中了如果有人看不懂也没关系我是自娱自乐)

    发布于 2017-10-12

    ​赞同 2​​4 条评论

    ​分享

    ​收藏​感谢收起​知乎用户

    知乎用户

    2 人赞同了该回答

    相似矩阵描述的是同一个变换过程。只是用于描述这一过程的基向量不一样。

    P和P逆的作用就是先转换基向量(P),转换基向量后就可以在这一组基向量基础上进行矩阵变换,然后P逆把变换后的那一坨东东的基向量再转回来。

    理解成有个中国人去国外问路,不懂英文只能去用翻译软件。翻译软件先把中文翻译成英文,然后老外看懂英文后用英文回答问题,然后翻译软件再把英文问题转换成中文答案。“老外看翻译的英文后用英文回答问题”与“有个当地华人直接用中文回答中文问题”就是一对儿相似矩阵。其对应的变换都是“问题—答案”这一个映射。

    为啥要相似矩阵,举个例子,学数学、计算机的都能知道,相比翻译版,还是原版的书比较清晰易懂。换言之,如果我有一本翻译过来的书,里面有些东西由于翻译原因看不懂,不方便进行从问题到答案的映射(一个矩阵由于某些性质不太好处理),那我最好能找到一本原版书来看(找一个好处理的相似矩阵)。

    某些相似矩阵有一些我们需要的优势,例如计算方便(例如特征向量组成的矩阵),那就最好转换过去。

    发布于 2017-06-23

    ​赞同 2​​添加评论

    ​分享

    ​收藏​感谢

    幺禾

    幺禾

    2 人赞同了该回答

    简单来说,两个矩阵相似,那么,他们具有相同的性质。
    那这条性质的用法就是。当你想知道一个矩阵有什么性质但因为它太复杂了看不出来时候。这时候,你正好知道,它跟另一个矩阵相似,而那个矩阵的特性一眼就看出来了。那么,本来这个很复杂的矩阵的性质跟那个矩阵是一样的。
    就是这样用的。

    ----------------------------------------------------
    补充一点吧,前面很多答主都再说变换到对角阵啊,Jordan形式,上三角形式啊之类的。这些都是操作上的东西了。
    其实核心在于相似两个字。用法跟相似三角形也差不太多。给你了你个你不知道的三角形。你想知道它的角度,性质啥的。抓瞎了。
    这时候了我告诉你,它跟一个你知道的三角形相似。好了,那你就知道那个三角形的性质了。

    编辑于 2017-06-11

    ​赞同 2​​添加评论

    ​分享

    ​收藏​感谢

    何大壮

    何大壮

    工人

    1 人赞同了该回答

    好的解释,是几乎能让一个九岁的孩子都明白的解释。

    恕我直言,关于这个问题,相似矩阵---这样的解释我还没见到过。

    我也不知道怎么解释这个问题,正在思考。

    编辑于 2018-02-13

    ​赞同 1​​添加评论

    ​分享

    ​收藏​感谢匿名用户

    匿名用户

    1 人赞同了该回答

    刚刚就用相似矩阵推导出了不同基底下的某系统哈密顿量。

    还有题主的买菜问题很奇怪,既然菜价和油价成正比,拟合出正比的系数就可以了,和线性代数有什么关系?

    发布于 2017-05-27

    ​赞同 1​​添加评论

    ​分享

    ​收藏​感谢

    Yaque

    Yaque

    IT小朋友一枚

    可能我没看完,但我看的答案里面没有我要说的,
    矩阵相似性用处很大,你要知道在计算机中,也就是电脑手机登中几乎所有的数据都能用矩阵表示,而两张图片一样吗,就是两个矩阵一样吗,两个矩阵相似吗。

    编辑于 2018-03-12

    ​赞同​​添加评论

    ​分享

    ​收藏​感谢

    李中华

    李中华

    工程 哈工大 万科 融创 设计 地铁

    实话说 马哥回答的真好,很少有人这么认真的回答问题,先给马哥点赞。
    通读完成后我的理解是这样的,看看能不能帮助你:


    我的理解这只是个过程变换,通过两次坐标的变化,对比两个坐标系下的同一矩阵。举例子:A坐标系,B坐标系,空间点M。核心是A、B坐标系下M点的坐标Ma、Mb是相似的。

    那么相似矩阵的定义是咋来的呢?A坐标系转换成B坐标系通过矩阵P,相反B坐标系转换成A坐标系就是p-1。

    所以:

    (个人理解不是很严密,只能是感觉上的理解,对于这个回答有一个瑕疵就是在三维坐标系下,只需要转化一次坐标系就够了,而这里来回了两次。)

    编辑于 2018-01-20

    ​赞同​​添加评论

    ​分享

    ​收藏​感谢

    刘静

    刘静

    理工科女博士

    相似矩阵是用来简化矩阵的,通过坐标变换。

    发布于 2017-09-14

    ​赞同​​添加评论

    ​分享

    ​收藏​感谢

    zzy

    zzy

    程序员

    建议楼主先去看看坐标变换公式,这个是相似矩阵的基础,它描述的是在不同的基中同一个向量(此处去掉脑海中的网格线)的坐标表示如何切换。相似矩阵多用于特征值分解和奇异值分解中,而它们最常见的就是用于PCA降维。因为对矩阵特征值分解后就能得到矩阵的主要运动方向和运动幅度,这些对于降维和去噪都是很必要的

    发布于 2017-08-10

    ​赞同​​添加评论

    ​分享

    ​收藏​感谢

    刘智

    刘智

    简单说就是描述一个运动的同一个线性变换在不同坐标系下的表达。有意思的是如果描述同一个空间在不同坐标系的位置只要用变换矩阵的逆矩阵左乘位置向量就可以,而描述运动还需要再右乘一次变换矩阵。

    编辑于 2017-08-09

    ​赞同​​添加评论

    ​分享

    ​收藏​感谢

    Aurelius

    Aurelius

    通过比较你挑菜的时间和价格,可以算出你的工资水平。
    通过比较大多数人挑菜的时间和价格,可以算出一地、一国的最低工资水平。

    发布于 2017-07-03

    ​赞同​​添加评论

    ​分享

    ​收藏​感谢知乎用户

    知乎用户

    怎么没有看到数学大佬的回答…

    编辑于 2017-05-27

    ​赞同​​添加评论

    ​分享

    ​收藏​感谢匿名用户

    匿名用户

    我也像你这样理解数学,后来我的DE就挂了。
    大概只能转行做销售了

    发布于 2017-05-27

    ​赞同​​添加评论

    ​分享

    ​收藏​感谢知乎用户

    知乎用户

    就是可以换个视角看问题

    发布于 2017-05-26

    ​赞同​​添加评论

    ​分享

    ​收藏​感谢匿名用户

    匿名用户

    主成分分析里要用到矩阵相似的数学概念。正交对角化用来提取主成分,相似变换也可以把主成分尽可能分开。(有时候是做正交旋转,只是resemble的一个小技巧吧)

    提取主成分以后可以做聚类分析,因子分析,回归分析之类的。

    发布于 2017-05-26

    ​赞同​​添加评论

    ​分享

    ​收藏​感谢

    蛏子

    蛏子

    天使

    假设小明的工作中要用到个很复杂的算钱公式,但是只能计算人民币,突然有天老板让他计算美元,咋整?当然是先把美元换算成人民币,算出多少钱,再换算成美元咯。

    整个过程就是(汇率的逆×公式×汇率)×输入值。美元和人民币就是两个不同的基,汇率就是两个基之间的过渡矩阵,公式就是线性变换。

    发布于 2018-06-08

    ​赞同​​添加评论

    ​分享

    ​收藏​感谢

    天才李健

    天才李健

    勇往直前的计算机

    感觉楼主真正想问的是矩阵到底有有什么作用。。。。。

    我的看法是。一个矩阵,就完整表示了一个世界。以前我都是直觉的认为 (x1;y1;z1;t1) 代表了一个世界,其实这是不对的。真的代表世界的是 (x1;y1;z1;t1,x2;y2;z2;t2,x3;y3;z3;t3,x4;y4;z4;t4)

    发布于 2018-05-18

    ​赞同​​添加评论

    ​分享

    ​收藏​感谢

    迪奥斯

    迪奥斯

    律师

    就是你娶媳妇的时候不知道该给多少彩礼,听说邻家小妹出嫁收了婆家八万八,然后你决定给九万八。嗯,差不多就酱紫。

    发布于 2017-05-27

    ​赞同​​添加评论

    ​分享

    ​收藏​感谢

    WHY君

    WHY君

    言情小说迷 大学生

    刚考完线性代数的我觉得其实还好啦。考试前我差不多也是这个想法,感觉要被逼疯了。认真刷了10套题,以不算太低的成绩通过考试,就觉得其实可以接受。

    展开全文
  • [img=https://img-bbs.csdn.net/upload/202007/14/1594738778_890418.png][/img]这是源代码 [img=https://img-bbs.csdn.net/upload/202007/14/1594738795_8290.png][/img]这是直接打开的运行结果[img=...跪谢大佬们了
  • ![图片说明](https://img-ask.csdn.net/upload/201610/11/1476165643_909057.png) 应该怎么调用那个分页
  • 要偷偷的学Python,然后惊呆所有(第一天)

    万次阅读 多人点赞 2020-10-11 22:05:39
    本系列文默认各位会百度,会在线编译器,因为是突击学Python的,之前的编译环境都删了,但是吧,发现在线编译是真的爽,浪费那时间去搭那环境干啥,学好了Python,会差那点请搭环境的钱吗? 要的不多,点...

    在这里插入图片描述

    标题无意冒犯,就是觉得这个广告挺好玩的
    上面这张思维导图喜欢就拿走,反正我也学不了这么多

    好,切入正题


    前言

    本系列文默认各位有一定的C或C++基础,因为我是学了点C++的皮毛之后入手的Python,这里也要感谢齐锋学长送来的支持。
    本系列文默认各位会百度,会用在线编译器,因为我是突击学Python的,之前的编译环境都删了,但是吧,我发现在线编译是真的爽,浪费那时间去搭那环境干啥,学好了Python,会差那点请人搭环境的钱吗?

    我要的不多,点个关注就好啦
    然后呢,本系列的目录嘛,说实话我个人比较倾向于那两本 Primer Plus,所以就跟着它们的目录结构吧。

    本系列也会着重培养各位的自主动手能力,毕竟我不可能把所有知识点都给你讲到,所以自己解决需求的能力就尤为重要,所以我在文中埋得坑请不要把它们看成坑,那是我留给你们的锻炼机会,请各显神通,自行解决。


    Python语言概览

    Python语言的起源

    老生常谈了,但是追本溯源有时候会有它意想不到的好处,全在个人悟性了。

    Python的作者,Guido von Rossum,确实是荷兰人。1982年,Guido从阿姆斯特丹大学(University of Amsterdam)获得了数学和计算机硕士学位。然而,尽管他算得上是一位数学家,但他更加享受计算机带来的乐趣。用他的话说,尽管拥有数学和计算机双料资质,他总趋向于做计算机相关的工作,并热衷于做任何和编程相关的活儿。

    在这里插入图片描述

    在那个时候,他接触并使用过诸如Pascal、C、 Fortran等语言。这些语言的基本设计原则是让机器能更快运行。所有的编译器的核心是做优化,以便让程序能够运行。为了增进效率,语言也迫使程序员像计算机一样思考,以便能写出更符合机器口味的程序。在那个时代,程序员恨不得用手榨取计算机每一寸的能力。

    然而,这种思考方式让Guido感到苦恼。Guido知道如何用C语言写出一个功能,但整个编写过程需要耗费大量的时间 。他的另一个选择是shell。然而,shell的本质是调用命令。它并不是一个真正的语言。比如说,shell没有数值型的数据类型,加法运算都很复杂。总之,shell不能全面的调动计算机的功能。

    Guido希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻松的编程。
    1989年,为了打发圣诞节假期,Guido开始写Python语言的编译/解释器。Python来自Guido所挚爱的电视剧Monty Python’s Flying Circus 。他希望这个新的叫做Python的语言,能实现他的理念(一种C和shell之间,功能全面,易学易用,可拓展的语言)。Guido作为一个语言设计爱好者,已经有过设计语言的(不很成功)的尝试。这一次,也不过是一次纯粹的hacking行为。

    1991年,第一个Python编译器(同时也是解释器)诞生。它是用C语言实现的并能够调用C库(.so文件)。从一出生,Python已经具有了:类(class),函数(function),异常处理(exception),包括表(list)和词典(dictionary)在内的核心数据类型,以及模块(module)为基础的拓展系统


    数据类型

    在这里插入图片描述

    Number数据类型

    int 整型 (正整形 0 负整型)

    float 浮点型即小数

    bool 布尔型 (True 真 False假)

    插一个
    complex 复数类型(这个我写代码两年多,也是没用过了)

    #表达方式一:
          complexvar = 5 + 6j
          complexvar = 3 - 2j
          print(type(complexvar))
          print(id(complexvar))
    
    #表达方式二:  
    		  complex(实数,虚数)
          res = complex(14,2)
          print(res)   => (14,2)
    

    容器数据类型

    str 字符串型

    '''用引号引起来的就是字符串,三种引号:单引号  双引号  三引号'''
    
    转义字符:\  (1)把有意义的字符转变为无意义的字符
            (2)把无意义的字符转变的有意义
    
         \n  或者 \r\n :   代表"换行"意思
         \t      	 :   代表"一个缩进"意思
         \r      	 :   代表将\r后面得所有字符拉到该行首  
    

    至于其他转义字符,这里不多赘述

    特征:可以获取,但不可以修改,有序排列
    获取字符串中的数据:跟列表list 元组tuple的取值一模一样(正向下标,反向下标)
    

    元字符串

    ‘’‘元字符串可以让转义字符失效’’’
    在这里插入图片描述

    字符串的格式化

    “%d %f %s”  语法 : “字符串” % (实际值)
    %d 占位符 d代表整型数据,%nd表示占n个位置
    在这里插入图片描述
    结果:XXX买了3个充气娃娃

    %f 占位符 f代表浮点型数据 默认保留6位小数点,f前面有数值,则根据数值是多少保留对应小数点
    在这里插入图片描述
    结果:今天大白菜2.35元一斤

    在这里插入图片描述
    结果:今天大白菜2.3元一斤

    %s 占位符 代表字符串
    在这里插入图片描述

    list 列表型([])

    ‘’‘特征:可以获取和修改数据,排列有序’’’

    在这里插入图片描述

    列表的修改

    在这里插入图片描述

    tuple 元组型 ( () )

    ‘’‘特征:可以获取但不能修改数据,排列有序’’’

    在这里插入图片描述
    获取元组中的数据 : 跟列表list的取值一模一样 (正向下标,反向下标)

    set 集合型 ({})

    setvar = {}     数据类型显示是一个dict 字典

    特征:不可获取,也不可以修改,无序排列,自动去掉重复数据

    dict 字典 ( {“aaa”:“bbb”,})

    冒号左边是键,右边是值,键值对之间用逗号隔开

     特征 : 可以获取,可以修改,无序排列
    		   底层使用了哈希算法,储存的数据是散列,键值对储存的数据
    		   获取字典当中的数据:可以获取,直接输入冒号左边的键即可取值的数据
    		   修改字典当中的数据:可以修改,直接将要改的值替换掉 键 就可实现修改
    		   一般在命名字典的键时,推荐使用字符串,按照变量命名的字符串.
    

    在这里插入图片描述

    补充

    获取数据类型的函数:type()
    获取变量地址的函数:id()


    四则运算

    在这里插入图片描述

    不过,对于这么多的算术运算符,我建议你先看一遍,有个大致的印象就行。你可以先把这张图保存上,等用的时候再找出来,对应着查阅就可以。

    咱们再说说一样的——运算优先级:Python世界的运算优先级,和我们平时的计算优先级是一样的。

    在这里插入图片描述


    字符串拼接

    Python有一个很优秀的点我很喜欢,那就是它的字符串拼接。
    曾经有人说,编程,说到底就是对字符串的操作,我觉得他说的很有道理,别看那些花里胡哨的,说到底都是操作字符串。

    反正C/C++里的字符串操作已经让我喝好几壶了,还没喝够。

    Python里面字符串拼接的方法可简单了,就是利用字符串拼接符号【+】,将需要拼接的变量连在一起就行了。
    在这里插入图片描述

    但是,既然是字符串拼接,那它的限制其实就很明显了,你得拿字符串来拼接。

    那如果我要拿去拼的东西参差不齐呢?怎么办?别急


    强制类型转换

    负责转换数据类型的函数一共有3种:str()、 int()和float()。
    在这里插入图片描述

    str()

    str()函数能将数据转换成其字符串类型,不管这个数据是int类型还是float类型,只要放到括号里。这个数据就能摇身一变,成为字符串类型。
    是不是挺简单的?我们只需通过str(number)一个步骤,便可以将整数类型的【153】转化为字符串类型的【153】,成功完成数据拼接。

    int()

    将数据转换为整数类型的方法也很简单,就是int()函数。其使用方法同str()一样,将你需要转换的内容放在括号里就行,像这样:int(转换的内容)。
    不过对于int()函数的使用,大家要注意一点:只有符合整数规范的字符串类数据,才能被int()强制转换。
    别看它虽然只有一句话,但它其实带有三层含义:

    首先,整数形式的字符串比如'6''1',可以被int()函数强制转换。
    其次,文字形式,比如中文、火星文或者标点符号,不可以被int()函数强制转换。
    最后,小数形式的字符串,由于Python的语法规则,也不能使用int()函数强制转换。
    

    虽然浮点形式的字符串,不能使用int()函数。但浮点数是可以被int()函数强制转换的(去尾法)

    float()

    首先float()函数的使用,也是将需要转换的数据放在括号里,像这样:float(数据)。
    其次,float()函数也可以将整数和字符串转换为浮点类型。但同时,如果括号里面的数据是字符串类型,那这个数据一定得是数字形式。
    

    那么,经过之前str()和int()操练,float()函数是不是好懂了一些?

    总结一下

    在这里插入图片描述


    标准输入输出

    好滴吧,可能有的人会犯嘀咕,为什么不讲输入输出。莫急嘛

    print()函数

    括号内是数字的情况
    print(520)
    
    括号内是单引号的情况。
    print('一起玩吧')
    
    括号内是双引号的情况。
    print("一起玩吧")
    
    括号内单双引号同时存在的情况。
    print("Let's play")
    
    当然,括号内也可以是三引号,参考上面单双同时出现的情况就知道了。
    

    之所以现在才说输入输出,是因为这里面实在可以包含太多东西了,不要被上面的这几个例子所迷惑,print可以打印各种数据类型,参考本文前面出现的print()以及后面将会出现的print()

    input()函数

    首先,让我们通过一段代码,来看一看input()函数是如何使用的:

    input('请在以下四个选项【格兰芬多;斯莱特林;拉文克劳;赫奇帕奇】中,输入你想去的学院名字:')
    

    input()函数是输入函数。就上面例子来讲,它需要你输入针对括号内’请在以下四个选项【格兰芬多;斯莱特林;拉文克劳;赫奇帕奇】中,输入你想去的学院名字:'的答案。
    所以,当你在函数的括号内写出问题时,input()函数会将此问题原样显示在屏幕上,并在终端区域等待你针对此问题的回答。

    可是,我们为什么要在终端处输入回答呢?不输入行不行?
    事实上,我们可以把input()函数当作一扇链接现实世界与代码世界的门。
    当问题从代码世界传递给我们,可我们却没有回答时,这扇等待输入的input()大门,就会一直处于敞开状态,一直等着你往里送回答。

    注意点

    对于input()函数来说,不管我们输入的回答是什么,不管你输入的是整数1234,还是字符串『隐形斗篷是我最想拥有的魔法』,input()函数的输入值(搜集到的回答),永远会被【强制性】地转换为【字符串】类型。

    这时候就要对输入的数据进行强制类型转换了:choice = int(input('请输入您的选择:'))


    控制语句

    条件控制语句

    if判断

    在这里插入图片描述

    在这里插入图片描述

    在这里,你可能注意到了一个细节:在条件判断代码中的冒号:后、下一行内容的前面,会空几个格,但这是为什么呢?
    首先,在计算机的沟通语言中,空格的学名叫缩进,比如我们写文章都要空两个格,这就叫首行缩进。
    icon

    对于Python而言,冒号和缩进是一种语法。它会帮助Python区分代码之间的层次,理解条件执行的逻辑及先后顺序。【注:缩进是四个空格】这里建议不要用tab,就四个空格的事情嘛,年轻人那么懒干嘛,养成习惯之后很多地方受限制。

    在这里插入图片描述

    if···else···

    很多时候,我们不能把鸡蛋放在一个篮子里,要做好两手准备:如果不满足条件时,我们要怎么办。
    Python则很贴心地,让我们借用if…else…语句,让码农们有了另一种选择——【如果…不满足,就…】

    在这里插入图片描述

    在if…else条件语句中,if和else各自抱团,形成两个不同的代码块。表示的是条件和其他条件的互斥关系——如果不满足if条件,就执行else其他条件。

    if···elif···else

    在判断3个或3个以上的条件时,我们就需要借助Python中的多向判断命令:if…elif…else…。

    当判断的条件超过3个时,中间的多个条件都可以使用elif。

    在这里插入图片描述

    elif后可不接else

    if嵌套

    像这种如果底下还有如果(即条件里还套条件)的情况,我们如何用Python把上面的规则写出来,并得出评价呢?

    答案就是——嵌套条件。

    在这里插入图片描述


    for···in···循环

    Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。

    for循环的语法格式如下:

    for iterating_var in sequence:
       statements(s)
    

    在这里插入图片描述

    for letter in 'Python':     # 第一个实例
       print ('当前字母 :', letter)
     
    fruits = ['banana', 'apple',  'mango']
    for fruit in fruits:        # 第二个实例
       print ('当前水果 :', fruit)
     
    print ("Good bye!")
    

    可以看出,模板中的iterating_var 是不用提前赋值的。

    range()函数

    使用range(a,b) 函数,你可以生成了一个【取头不取尾】的整数序列。
    例如:

    for i in range(13,17):
        print(i)
    

    结果:13、14、15、16


    range()函数还有一种用法,我们来直接体验一下:

    for i in range(0,10,3):
        print(i)
    

    这是一种切片方式,第三个参数被称作“步长”,即间隔多少取一个数。
    那么这个代码执行的结果就是:0、3、6、9

    循环使用 else 语句

    在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。

    for num in range(10,20):  # 迭代 10 到 20 之间的数字
       for i in range(2,num): # 根据因子迭代
          if num%i == 0:      # 确定第一个因子
             j=num/i          # 计算第二个因子
             print ('%d 等于 %d * %d' % (num,i,j))
             break            # 跳出当前循环
       else:                  # 循环的 else 部分
          print (num, '是一个质数')
    

    while循环

    while循环和for循环差不多,不过这里的计数变量要初始化:
    栗:

    a = 0                #先定义变量a,并赋值
    while a < 5:         #设定一个放行条件:a要小于5,才能办事
        a = a + 1  # 满足条件时,就办事:将a+1
        print(a)   # 继续办事:将a+1的结果打印出来
    

    在这里插入图片描述

    很明显,while循环有2个要点:1.放行条件;2.办事流程。

    和for循环一样,冒号和内部代码的缩进都是必不可少的。

    其他

    break

    我们先来看看break语句。break的意思是“打破”,是用来结束循环的,一般写作if…break。它的写法长这样:

    # break语句搭配for循环
    for...in...:
        ...
        if ...:
            break
    
    # break语句搭配while循环
    while...(条件):
        ...
        if ...:
            break
    

    在这里,if…break的意思是如果满足了某一个条件,就提前结束循环。记住,这个只能在循环内部使用。

    continue

    continue的意思是“继续”。这个子句也是在循环内部使用的。当某个条件被满足的时候,触发continue语句,将跳过之后的代码,直接回到循环的开始。

    # continue语句搭配for循环
    for...in...:
        ...
        if ...:
            continue
        ...
    
    # continue语句搭配while循环
    while...(条件):
        ...
        if ...:
            continue
        ...
    

    在这里插入图片描述

    pass

    pass语句就非常简单了,它的英文意思是“跳过”。

    对比两种循环

    for循环和while循环最大的区别在于【循环的工作量是否确定】,for循环就像空房间依次办理业务,直到把【所有工作做完】才下班。但while循环就像哨卡放行,【满足条件就一直工作】,直到不满足条件就关闭哨卡


    练手小项目

    接下来,我想先和你谈谈一个项目一般是怎么完成的。更具体的说,程序员是如何思考和解决问题的呢?

    我认为其中一个很重要的能力是【问题拆解】。问题拆解,指的是在做一件事或面对一个问题的时候,将其拆解成多个步骤或多个层次,逐步执行和解决问题,直至达到最终效果。

    在这里插入图片描述

    写个什么小项目呢?

    这样吧,猜数字游戏都玩过吧,就写一个猜数字游戏:

    功能需求:
    实现一个猜数字小游戏,随机生成一个0~100以内的数据,由玩家来猜,每次猜完之后计算机告诉玩家是猜大了还是猜小了,共5次机会,5次猜不出来宣布游戏失败。

    很简单吧。

    写好的也可以发在评论区哦


    长尾流量优化

    建议收藏,不然划着划着就找不到了嘞。

    我建了一个Python学习答疑群,有兴趣的朋友可以了解一下:这是个什么群

    直通群的传送门:传送门
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 打电话给修网络的,说太晚了,要第二天才能过来,这TM没网不是要我的命么?电脑看到隔壁小姐姐的wifi信号满格哇,这让我动了邪念,看没有办法蹭下网,我第一个想到了高效的Python,尝试看能不能破解隔壁小姐姐的...

    点击上方“何俊林”,马上关注,每天早上8:50准时推送

    真爱,请置顶或星标

    原文:转载自公号菜鸟学Python

    作者:小超

    昨晚家里停网了,对于互联网人,停网了,这能忍?打电话给修网络的,说太晚了,要第二天才能过来,这TM没网不是要我的命么?电脑看到隔壁小姐姐的wifi信号满格哇,这让我动了邪念,看有没有办法蹭下网,我第一个想到了高效的Python,尝试看能不能破解隔壁小姐姐的wifi密码~

    Python真的是无所不能,原因就是因为Python有数目庞大的库,无数的现成的轮子,让你做很多很多应用都非常方便。今天从WiFi连接的原理,再结合代码为大家详细的介绍如何利用python来破解WiFi。

    1

    如何连接wifi

    首先我们的电脑是如何连接wifi的呢?就拿我们的笔记本电脑来说,我们的笔记本电脑都有无线网卡,如下图所示:

    当我们连接WiFi时,无线网卡会自动帮助我们扫描附近的WiFi信号,并且会返回WiFi信号的一些信息,包括了网络的名称(SSID),信号的强度,加密和认证的方式等。这些信息我们在进行操作的时候是看不到的。当我们想要连接指定WiFi的时候,我们都需要进行认证,认证的作用就是保护wifi的访问,注意这里的认证不是我们输入的密码,而是将我们输入的密码进行加密的方式。

    也就是将我们输入额WiFi密码,进行加密传输的一种方式。大家常用的方式是WPA或者是WPA2PSK,主要是针对个人或家庭网络等,对安全性要求不是很高的用户。如下图所示。

    当我们输入密码后,会弹出提示来告诉我们一些提示的信息,这个提示的信息其实就是在指定认证加密的方式。我们点击“是”之后,就可以开心的上网了。

    2

    利用pywifi模拟接入

    pywifi这个库是第三方的需要提前用pip安装一下,接着我们就利用pywifi模块来模拟这一个过程。首先是判断电脑是否处于WiFi连接的状态,代码如下图所示。

    首先是创建一个pywifi的对象,然后将电脑无线网卡的信息赋值给ifaces。接着判断ifaces的状态(states)即可知道电脑是否连接无线网络。上面我们提到无线网卡会返回无线信号的信息,接下来我们就来输出一下我们扫描到的附近的无线信号以及它们的信息。

    如上图左侧所示,我们输出了无线信号的名称和其对应的加密方式。二代码中的data其实就是一个个的配置文件。这里的配置文件我们可以理解为一个存储了我们连接的无线信号信息的文件,里面包含了无线信号的名称,密码,认证方式等等信息。

    3

    破解wifi密码

    接下来,我们就要利用pywifi来进行破解WiFi密码的操作。我们仿照手动输入密码的过程,并进行验证,如果密码错误的话,我们就不停的更滑密码进行试验直到成功为止。部分的代码如下所示:

    程序中,我们首先从console中读入我们想要破解额WiFi名称,然后从我们事先设置好的WiFi密码本中,不停的读入WiFi密码,然后配置profile的信息,包括WiFi的名称,认证方式和WiFi的密码。如果密码错误的话,就更换WiFi密码继续进行验证,直到验证正确为止。下图是实验的结果。

    上述的破解方法也被称为暴力破解法。当然这种暴力破解需要有一个数据库样本,比如有数十万的破解密码的样本。这样通过充足的时间,可以用来尝试。本文只是从技术的角度来阐述如何利用python来玩WiFi,来学习Pywifi这个库!并不建议大家做任何破坏性的操作和任何不当的行为。

    强烈推荐一个Python号给大家,Python可以做非常好玩和有意思的事情。更多爬虫,关注下面公号,后台回复:wifi破解,获取全套代码。

    说句题外话,有不少人想加鱼哥微信,鱼哥姑且放出来,但是坑位有限哦

    想去大厂么?来加入鱼哥技术星球,放大你进大厂概率

    扫描如下二维码加入我的知识星球:

     推荐阅读

    憋了1年,今天,我有件大事和大家说下!

    "2019,别去互联网大厂了!"

    喜欢就点在看吧

    展开全文
  • 相信你们应该不止一个微信号,赶紧查询一下,你的身份证到底绑定多少个,还有看看没有利用你身份证注册微信号,一旦被不法分子使用你的身份证注册的微信号干坏事,那你也脱离不了关系,赶紧检查一下。...

    我相信你们应该不止一个微信号,赶紧查询一下,你的身份证到底绑定多少个,还有看看有没有人利用你身份证注册微信号,一旦被不法分子使用你的身份证注册的微信号干坏事,那你也脱离不了关系,赶紧检查一下。

    赶紧查询一下你的身份证,是否有人盗用你

    查询步骤方法:

    1.打开微信-我-钱包-右上角的格子按钮。

    赶紧查询一下你的身份证,是否有人盗用你

    2.打开安全中心页面后,选择帮助中心,再点击实名认证

    赶紧查询一下你的身份证,是否有人盗用你

    3.实名认证打开后,选择账号管理,在点击「如何查询本人身份证绑定了多少个账户?」。

    赶紧查询一下你的身份证,是否有人盗用你

    4.打开后,选择联系客服,然后提交相关内容。问题描述你可以填写:注册多少个微信号

    赶紧查询一下你的身份证,是否有人盗用你

    5.提交完成后,等待通知,它将通过腾讯客服公众号答复您结果,请耐心等待,一般48小时内通知你。

    赶紧查询一下你的身份证,是否有人盗用你

    PS:查询后,发现自己身份证被其它人冒用,那你就应该处理注销了,你可以向腾讯申请注销或者冻结对方微信号

    觉得不错的,记得点赞分享

    展开全文
  • 我用ABAP做过的那些无聊的事情

    千次阅读 多人点赞 2018-10-01 22:27:41
    《SAP成都研究院李三郎:SCP Application Router简介》的作者,一次11月份的时候和Jerry一起去德国出差,不解地问到:德国好歹也八千多万人口,怎么街上冷冷清清的几乎看不到呢? 对于这个问题Jerry也没有...
  • 哪些网站爬虫爬取能得到很价值的数据?

    万次阅读 多人点赞 2019-05-05 17:47:07
    1、微信好友的爬虫,了解一下你的好友全国分布,男女比例,听起来似乎是一个不错的想法,当然你还可以识别一下你的好友多少自己照片作为头像的,详细的内容可以点击这里:Python对微信好友进行简单统计分析 ...
  • 哪些软件就不一一列举了,重点是为什么不能了? 经过一番深度研究终于有所发现,鉴于其原因相当复杂,每个电脑不用的原因还都一些区别,但是总体上可以归为三类。请看小编给您娓娓道来。 谷歌地球不能的...
  • 要偷偷的学Python,然后惊呆所有(第四天)

    万次阅读 多人点赞 2020-10-21 12:13:31
    `if __name__ == '__main__'`csv模块操作Excel图表什么模块?这个模块里哪些东西?使用csv模块读写 前言 前期回顾:要偷偷学Python,然后惊呆所有(第三天) 上面这篇里面写了python的一些知识基础,...
  • 生日悖论: 是指在不少于 23 个人中至少生日相同的概率大于 50%。例如在一个 30 的小学班级中,存在两生日相同的概率为 70%。对于 60 的大班,这种概率要大于 99%。从引起逻辑矛盾的角度来说,生日悖论并...
  • python可以做哪些有趣的事--:选股票

    万次阅读 多人点赞 2018-03-17 16:17:12
    最近炒股是买什么就跌,一直是亏损哎,哭,作为学过python的来讲怎么能容忍,之前也炒过股票觉得阳包阴这样的k线来选出来的股票还不错。于是说做就做,可以python来写一个选股的程序。 好!了idea是第一步...
  • 有人说获取deliver报文,有人说要建个服务端等待网关的连接和解析网关传过来的报文。 这个协议里面的Deliver 是个什么概念 ?就想submit 知道是封装报文然后提交到网关,这个Deliver到底是个什么东西?该怎么? ...
  • 爬虫100例的原则上最后一篇文章,很激动,很多话想说,请允许写这么一篇唠唠叨叨的文章。 写爬虫系列很迷,估计和很多进入爬虫编码圈的一样,单纯的只想看一些图片,然而一页页的去翻,真的好麻烦,总想着...
  • 前两天个亲戚家孩子(算是我的远房表妹吧),找我聊工作方面的问题,她本科学的金融,毕业却去了一家地产公司做HR,干的不好最近想跳槽,想转行干运营或者重拾起老本行干财务,看了一圈网上的招聘信息,发现都要求...
  • 的Panabit策略设置

    千次阅读 2012-07-01 07:25:50
    如不做限制,6个人看视频的话,其他的看网页都会不流畅。 还有1个原因是强迫同事在11点前休息,所以在晚上10点时就禁止游戏和视频,要不同事没足够自控能力,熬到12点,第2天精力不会好。 IP群组定义2个...
  • 第一天老师:你知道么,今天有人问了一个问题。 ~.:什么? 老师:他说很难。 ~.:关于什么的? 老师:图像处理。~.:喔,你说说看,确实做了不少图像处理的东西(心里默念,你不知知道你给过多少...
  • 帅地:用心写好每一篇文章! 前言 天各一方的两台计算机是如何通信的呢?在成千上万的计算机中,为什么一台计算机能够...说实话,五层模型的具体内容还是极其复杂的,不过今天这篇文章,最简洁的模式,通过网...
  • 技术经理成长复盘-是什么样的

    千次阅读 多人点赞 2020-11-15 13:22:55
    需要让周围的,知道你什么样的实力,是怎样的风格,尽量快的速度,让别人对你产生好的印象,慢慢产生信任,然后你才可能慢慢的铺开做事情。切记不要操之过急,这个时候大家都还完全不了解你,不知道你是什么...
  • 对于英文不好的来说,看纯英文的文章会有点吃力,而且会恐惧感。但是不看些英文的资料,无疑是对外界精彩的思想精华,前沿技术关上了一扇门。之前过google的网页翻译,虽然很强大,可以翻译多国语言,但是体验...
  • 事情,大概是这样的—— (没错这又是一篇被作业算法血虐的心路历程大水文) 哦对了,得先解释一下,逆序数这东西呢,可以理解为冒泡排序的过程中,bubble一次算一次逆序,全部排序完毕之后bubble了多少次,那就是...
  • 找到了 AI 去马赛克的办法……

    千次阅读 2017-11-24 15:16:29
    据说一种能够消除视频马赛克的神技能将要在此亮相,让敏哥带着敏哥的小伙伴们一起来寻找技术的福音!(GITC大会现场,是不是感觉很高大上的一场峰会,身为技术小白或者技术大咖的你是否也想来参加一下...
  • 首先并没有什么恶意,也没想着提MGS虚拟币交易平台说好话,只是看不惯,从18年了解MGK到现在,很多从MGS受益颇丰,从而想在这里给大家普及下为什么MGS天天被黑还是很多相信,项目品牌和会员忠诚度还这么高...
  • 啥水平?谷歌程序员:我用东北方言编程

    万次阅读 多人点赞 2020-02-11 19:16:24
    东北方言编程火了之前在北京工作了两年,16年6月-18年8月,接触了不少东北,工作、打篮球都接触到不少,他们的方言也听了许多,一句魔幻的方言必须的必须教给大家,当然也是本人的口头禅...
  • ? 大多数的回答是:"NULL就是系统定义特殊的0,把你初始化的指针指向它,可以防止“野指针”的恶果。" 今天碰到一个C语言的笔试题,还是一道不错的题~~~ Exp 1: #include void fun(int *node) {...
  • ❤️ 跟一起python追到女朋友!❤️

    万次阅读 多人点赞 2021-02-09 14:14:52
    哈哈哈,专业帮追女朋友,心想两玩得超好的同学,都是帮忙追的哈哈哈,要是粉丝需要帮忙出谋划策,尽管私聊哈哈哈。在逛Youtube的时候偶尔看到了相关的学习视频,于是自己也动手敲了哈哈! ...
  • 学会了ethtool给网卡点灯

    万次阅读 2016-12-24 07:47:26
    这是上周的事情了,当时只发了朋友圈,没有记录下来,今天补上。 感谢同事教会一项超级有用的新技能,那就是网卡点灯!...虽然不管在前公司还是在现公司,这个问题都不归管,但作为技术洁癖的而言,学会这个
  • 已经有人给你那么多方法了.还是建议不要extern去使全局变量,也不要把变量定义在头文件,然后include把变量包含进其它源文件使用,不要这样做!这是菜鸟的做法! 正确的做法是这样的,你把变量定义在相应的源文件中...
  • 众所周知,java可以调用打印机来进行打印。...比如,想打印凭证单据,这种单据是HALFLETTER,jasperreport编写了打印的报表的模板,当具体打印输出时,打印机走纸却是走了一张A4纸的大小,也

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,874
精华内容 35,949
关键字:

有人用我的