原文地址1:https://www.face2ai.com/Math-Linear-Algebra-Chapter-6-7转载请标明出处

Abstract: 本文介绍SVD,奇异值分解,应该可以算是本章最后的高潮部分了,也是在机器学习中我们最常用的一种变换,我们经常需要求矩阵的特征值特征向量,比如联合贝叶斯,PCA等常规操作,本文还有两个线性代数的应用,在图像压缩上,以及互联网搜索上。
Keywords: Singular Value Decomposition,JPEG2000,Eigenvalues,Eigenvectors

SVD分解

今天的废话关于学习知识,最近看到一种说法,我觉的非常的形象,有个大神(是谁我忘了),他说已知的知识像一个圆圈,而自己能感受的未知就是紧邻圆圈,圆外部的区域,当你知道的知识越来越多,圆圈不断扩大,圆周也随之扩大,所以你会越来越发现自己无知,那么就会更努力的去学习,所以越有知识的人越谦逊,尤其是对待知识上,尊重知识,探索未知领域是人类文明存在的根本动力。

奇异值分解 (Singular Value Decomposition)

SVD,熟悉的名字,如果不学习线性代数,直接机器学习,可能最先接触的就是SVD,所以我记得在写上个系列的博客的时候(CSDN,图像处理算法)就说到过SVD,当时还调侃了下百度,每次搜SVD出来的都是一把枪(报告政府,这个枪是穿越火线里面的,没超过1.7J)

这张分解图是我无意中发现的,ak47的发明人说过,如果一把枪,零件已经精简到最少了,那么这个才是精品,类似的意思上篇博客也说过,矩阵变换到最简单的形式,能够体现出其最重要的性质。
SVD,奇异值分解,与QR,LU,SΛS1S\Lambda S^{-1} 等变换类似,其经过变换后会得到一个结构特异性质非凡的矩阵,SVD分解的结果和形式与对角化都非常相似,只是在形式和思路上更复杂,或者说如果说Jordan 是矩阵的对角化的扩展,因为有些矩阵特征向量不完全,那么SVD也是对角化的扩展,因为有些矩阵并不是方的。
所以SVD也是对角化,并且拥有比 A=SΛS1A=S\Lambda S^{-1} 更完美的性质,但却是也复杂了一些,A=SΛS1A=S\Lambda S^{-1} 有以下几个问题,需要完善:

  1. S中特征向量一般不是正交的,除非A是对称矩阵
  2. A并不是总有足够的特征值,这个是Jordan解决的问题,多个特征值相等,其对应于一个特征向量的时候,Jordan可以写成一块一块的对角矩阵
  3. A必须是方的方的方的

Singular Vectors作为eigenvectors 的替代品,可以完美解决上述问题,但是作为代价,我们的计算过程会变得复杂,并且Singular Vectors有两组,uuvv

uu 对应的是AATAA^T 的特征向量,因为 AATAA^T 对称,所以 uu 们可以选择相互正交的一组。
同理 vv 对应 ATAA^TA 的特征向量,因为ATAA^TA 对称,所以 vv 们也可以选择相互正交的一组。
这里注意是选择,因为你也可以选择不正交的,但是不正交的可能就会很麻烦了。

铺垫的差不多 ,然后我们有下面的这条重要性质,为什么会成立后面有证明,现在就告诉你SVD究竟是个啥子鬼:
Av1=σ1u1Av2=σ2u2Avn=σnun Av_1=\sigma_1u_1\\ Av_2=\sigma_2u_2\\ \vdots\\ Av_n=\sigma_nu_n\\

v1,,vnv_1,\dots,v_nATAA^TA 的特征向量,所以 vv 是矩阵A的Row Space
u1,,unu_1,\dots,u_nAATAA^T 的特征向量,所以 uu 是矩阵A的Column Space
σ1,,σn\sigma_1,\dots,\sigma_n 全部为正数,称为矩阵A的奇异值。

然后下面我们把 uuvv 组合成矩阵 UUVV ,那么根据对称矩阵的性质,UTU=IU^TU=I 同理 VTV=IV^TV=I 那么接下来我们来组合一下:

AV=UΣA[v1vr]=[u1ur][σ1σr] AV=U\Sigma \\ A \begin{bmatrix} &&\\ v_1&\dots&v_r\\ && \end{bmatrix}= \begin{bmatrix} &&\\ u_1&\dots&u_r\\ && \end{bmatrix} \begin{bmatrix} \sigma_1&&\\ &\ddots&\\ &&\sigma_r \end{bmatrix}

矩阵形式就是这样喽,没什么解释的,就是上面计算的组合形式,但是注意这里有个很重要的参数,rr 没错,就是矩阵的rank,这里rank表示了矩阵A的Singular Values的数量,所以上面计算从规模上是:
(m×n)(n×r)=(m×r)(r×r)m×r=m×r (m\times n)(n\times r)=(m\times r)(r\times r)\\ m\times r=m\times r
从矩阵相乘的规模上也能看出等式没有问题,但是这个r有的问题,可以肯定的是,有效的Singular vector有r组,但是这样与原始矩阵形状差的有点多,那么就补一补,虽然补的都是没用的,但是也算是整齐划一了,首先 Σ\Sigma 中缺少的只能补0 ,所以对应的V就只能补A的Nullspace了,因为这样 AVAV 的补充部分是0,同理,为了配合V,U添加的是left nullspace,并且这些添加的无用值也要选择orthonormal的,以保证UTU=IU^TU=IVTV=IV^TV=I

其实这里隐藏了一个重要的知识点,就是四个空间的那课,矩阵的rowspace和nullspace正交column space与left nullspace正交,而V本来是A的行空间正交基,那么添加的一定是Nullspace中的正交基,以保证矩阵正交,所以完美结合,(如果忘了四个空间点击查看)

所以更一般化的表示:
AV=UΣA[v1vn]=[u1um][σ1σr] AV=U\Sigma \\ A \begin{bmatrix} &&\\ v_1&\dots&v_n\\ && \end{bmatrix}= \begin{bmatrix} &&\\ u_1&\dots&u_m\\ && \end{bmatrix} \begin{bmatrix} \sigma_1&&&\\ &\ddots&&\\ &&\sigma_r&\\ &&& \end{bmatrix}
规模上是,注意 Σ\Sigma 不是方阵:
(m×n)(n×n)=(m×m)(m×n)m×n=m×n (m\times n)(n\times n)=(m\times m)(m\times n)\\ m\times n=m\times n
Σ\Sigma 被填充成立 m×nm\times n 通过在矩阵中加入0来实现,新的矩阵U和V依旧满足 VTV=IV^TV=I以及 UTU=IU^TU=I

那么我们的A就可以分解了
AV=UΣfor:  VVT=Iso:A=UΣVTSVD   is:A=u1σ1v1T++urσrvrT AV=U\Sigma\\ for:\;VV^T=I\\ so:\\ A=U\Sigma V^T\\ SVD\,\,\, is:\\ A=u_1\sigma_1 v_1^T+\dots+u_r\sigma_r v_r^T
其中uum×1m\times 1vTv^T1×n1\times n 的,所以A是 m×nm\times n 的没有问题,并且所有 uiσrviTu_i\sigma_r v_i^T d的rank都是1,这就是Sigular Values Decomposition了,这里反复的验证规模的原因是因为A不是方阵,所以,在做乘法的时候要非常小心矩阵规模。那个小的只有r个有用值的SVD我们叫他reduced SVD(其实我觉得这个更有实际意义,毕竟这里面才有最重要的信息,新增的那些最后奇异值都是0了,也就没有啥作用了)可以表示为:
A=UrΣrVrT A=U_r\Sigma_r V_r^T
写了这么多,我们到现在还不知道Singular是怎么计算出来的,那么我们先给出结论,后面继续证明:
σi2=λi \sigma_i^2=\lambda_i
其中λi\lambda_iATAA^TAAATAA^T 的特征值。
那么要问ATAA^TAAATAA^T 拥有相同的特征值,为什么?
这个我真没想明白怎么证明,所以这个地方算个坑,会了再回来填

然后我们得到Singular Values后,我们把他们按照从大到小的顺序排列,然后写成上面SVD的形式:
σ1σ2σ3σn \sigma_1 \geq \sigma_2 \geq \sigma_3 \dots \geq \sigma_n

下面举个小🌰 :
什么时候SVD和对角化相等?
当A是半正定或者正定矩阵的时候,S=US=U 并且 ST=VTS^T=V^T 此时 Λ=Σ\Lambda=\Sigma ,因为正定矩阵特征值为正,而且是对称的,所以 U=V=QU=V=Q

下面介绍一个应用,大应用,为什么我会把这个应用写出来呢?因为他和图像有关,所以我们可以简单实践一下,还是从感性上认识一下SVD,然后再理论上完整的证明一下。

图像压缩 (Image Compression)

在介绍SVD之前,我们先来分析一个问题:图像的存储空间,一个图像假如是512x512的大小,灰度图像,每个像素占一个字节的话,这张图片那么会占据硬盘262144个字节,也就260多k个字节,如果按照23帧每秒,十秒钟大概要60兆,一分钟大概3.6G,在想想这个尺寸这么小,我们看的一般都是720P的,这样算的话硬盘根本不够用,一个东京热以后就再也不能一本道了,所以必须要压缩一下子,怎么压缩呢,这里介绍下JPEG的一个大致思路,就是矩阵分解:
A=u1σ1v1T++urσrvrTA=σ1u1v1T++σrurvrTA=σ1S1++σrSrwhere:Si=uiviT A=u_1\sigma_1 v_1^T+\dots+u_r\sigma_r v_r^T\\ A=\sigma_1 u_1 v_1^T+\dots+\sigma_r u_r v_r^T\\ A=\sigma_1 S_1+\dots+\sigma_r S_r\\ where:\,S_i=u_i v_i^T
这样就是按照singular的大小,给所有singular vector排序,奇异值越大证明这个奇异值向量对原始数据影响越大,所以这两奇异向量组成的这个基就越重要,当然要提前加进去,所以我们如果选择一部分奇异值和奇异向量,比如N=100N=100 也就是200个奇异向量和100个奇异值,那么一共是200×512+100=102500200\times 512+100=102500 比原来的260k减少了一半,如果用的更少那么减少的更多,当然图像质量也就有所损失了,写了个python程序,可以观察一下:
使用多组S来还原原始数据,使用S越多还原度越高,但需要的存储空间就越大,S就是上面uiviu_iv_i的结果,可以看做图像的一个切片,视频中第一幅为原图,第二幅为若干张S相加得到的结果,最后一张是他们之间的差,我们可以暂时理解为压缩误差。

视频演示地址http://player.youku.com/embed/XMzE5NTIyNjQ4MA==

代码

import cv2
import numpy as np
from numpy import linalg
import copy
N=500
image=cv2.imread('lena.jpg',0)
cv2.imshow('src',image)
U,Sigma,V=linalg.svd(image)
sigma_size=len(Sigma)
image_s=[]
waittime=0
for i in range(N):if i>sigma_size:breakimage_s.append(U[:,i].reshape(len(U[:,i]),1)*V[i]*Sigma[i])if i>0:image_s[i]+=image_s[i-1]print 'total: ',i,' Singular Value'show_image=copy.deepcopy(np.uint8(image_s[i]))font = cv2.FONT_HERSHEY_TRIPLEXcv2.putText(show_image, `i`, (10, 500), font, 4, (255, 255, 0), 1, False)cv2.imshow('Compression',show_image)cv2.imshow('Different',np.uint8(image-image_s[i]))cv2.waitKey(waittime)waittime=100

上面公式中每个S都是一个rank=1的矩阵,如果两个这样的矩阵相加,rank就变成了2,n个相加就是rank=n,所以SVD分解后再组合有点像切片,每一片都是有规律的,同样的道理,SVD换成小波,那就有了JPEG2000,小波的基矩阵也是满足一些特殊性质的,后面可能会将,但是不确定,所以数据压缩可以理解为最关键的一步就是两个向量相乘,能够得到一个矩阵,这个矩阵组成了基础的片,然后多个片加权求和就得到了还原数据。
SVD的应用应该非常多这里就写了一个,比较重要直观的,下面还是要继续研究原理。

基和SVD(The Bases and the SVD)

书中并没有给出严格的证明和推到过程,老爷子还是走的启发式套路,我们来从基开始看,假设一个矩阵A是个2x2的矩阵,这样比较好计算,并且A是非奇异矩阵,也就是A可逆,rank=2,span成整个 2\Re^2 空间,那么我们应该可以找到两个向量正交的单位向量 v1,v2v_1,v_2 满足 u1=Av1Av1,u2=Av2Av2u_1=\frac{Av_1}{|Av_1|},u_2=\frac{Av_2}{|Av_2|} 使得u2u_2u1u_1 正交,并且是单位向量,那么就有:
A[v1v2]=[Av1Av2]=[Av1u1Av2u2]=[u1u2][Av1Av2]AV=UΣ A \begin{bmatrix}v_1&v_2\end{bmatrix}= \begin{bmatrix}Av_1&Av_2\end{bmatrix}= \begin{bmatrix}|Av_1|\cdot u_1&|Av_2|\cdot u_2\end{bmatrix}= \begin{bmatrix}u_1&u_2\end{bmatrix} \begin{bmatrix}|Av_1|&\\&|Av_2|\end{bmatrix}\\ AV=U\Sigma
总结下,这个构造基的过程是瞄准了目标去的,也就是说目标就是类似于构造 Ax=αyAx=\alpha y 形状的一种形式,但是x和y要满足不同的关系,如果相等那么就是特征值,如果不相等就可以构造出多组相互正交形成奇异值,并且通过上面的构造过程,我们可以得知奇异值等于缩放u到单位向量的缩放比例 Av|Av|
其实可以用一种更直观的方法解答SVD的存在:
假设对任意矩阵A存在分解 A=UΣVTA=U\Sigma V^T 并且其中UTU=IU^TU=I VTV=IV^TV=I 那么我们要证明U和V的存在即可:
ATA=(UΣVT)T(UΣVT)ATA=VΣ(UTU)ΣVTATA=VΣ2VT A^TA=(U\Sigma V^T)^T(U\Sigma V^T)\\ A^TA=V\Sigma (U^TU) \Sigma V^T\\ A^TA=V\Sigma^2 V^T
虽然A不是对称的,但因为ATAA^TA 是对称矩阵,存在正交矩阵Q使得 ATA=QΛQTA^TA=Q\Lambda Q^T,那么这时候的V就是 ATAA^TA 的Q这个是没问题的,至于 λi=σi20\lambda_i=\sigma_i^2 \geq 0 成立的原因是 ATAA^TA 是个正定矩阵(A中各列线性无关),或者半正定矩阵(A中各列线性相关),所以其特征值 λ\lambda 必然非负数,所以根号后能得到奇异值,根据Avi=σuiAv_i=\sigma u_i 可以求出剩下的 uiu_i ,当然这是理论上的方法,实际上的数值计算过程中可以避免 ATAA^TA 这种大规模矩阵乘法。
回忆一下正定矩阵关于椭圆的那个例子
一个2x2正定矩阵对应二维空间一个椭圆(或者圆),其正交特征矩阵Q矩阵是对椭圆轴的旋转,特征值矩阵 Λ\Lambda 是对轴的拉伸,那么我们的SVD有同样的功效,而且有过之无不及,思考:
作为ATAA^TA 的正交特征矩阵VV也是一个旋转矩阵,旋转的是圆的轴,VTV^T 当然就是反方向旋转,Σ\Sigma 是对图形的拉伸,圆的拉成长的,接着 AATAA^T 的正交特征矩阵也是旋转,整个过程如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kRB9BvWl-1592544473456)(https://tony4ai-1251394096.cos.ap-hongkong.myqcloud.com/blog_images/Math-Linear-Algebra-Chapter-6-7/rotation_reflection.png)]

所以一个2x2的可逆矩阵,对一个圆的操作就是先拉伸,然后旋转。图中来自Cliff Long and Tom Herm

上面讲解了如何求V,同样的道理也可以求U,
AAT=(UΣVT)(UΣVT)TAAT=(UΣVT)(VΣU)AAT=UΣ2UT AA^T=(U\Sigma V^T)(U\Sigma V^T)^T\\ AA^T=(U\Sigma V^T)(V\Sigma U)\\ AA^T=U\Sigma^2 U^T
U是AATAA^T 的正交特征矩阵,也就是说同一个 Σ2\Sigma^2 既是 AATAA^T 又是 ATAA^TA 的特征值,所以上面那个疑问也得到了证明。
我们重新梳理一下这个证明过程,我们首先假设结论成立,来找到使结论成立的条件,也就是V和U矩阵,结果很理想的,我们找到了,所以原来结论成立,成立的条件就是我们刚找到的这两个矩阵(如果算上奇异值,可以说是三个矩阵),思考过程可以通过2x2构造那里来推出简单情况下,来验证我们的结论,然后再推广到任意矩阵。
至此SVD的基本来路我们已经算是摸着门了,所以可以深入开发下V和U矩阵,这两个矩阵是方阵,那么组成这些矩阵的向量门也是很有来历的,总结个表格,前面在第一部分有说过,就是reduced SVD那部分,这里在啰嗦一边:

Number in which Matrix(column) in which Subspace
r V rowspcae of A
n-r V nullspace of A
r U column space of A
m-r U nullspace of ATA^T

前r列对应的是 ATAA^TAAATAA^T 的特征向量,因为其间的正交关系,所以SVD是没有什么问题的。
严格的证明:
ATAvi=σi2vi A^TAv_i=\sigma_i^2v_i
这个是可以作为条件使用的,其成立的必然原因是 ATAA^TA 是正定或半正定矩阵,所以必然存在n个大于等于0的实数特征值,这样可以得到vi,σiv_i,\sigma_i ,在这个条件下我们目标是证明:存在uiu_i 使得Avi=σiuiAv_i=\sigma_i u_i 成立

对条件两边同时乘上 viTv_i^T 后:
viTATAvi=σi2viTviAvi2=σi2so:Avi=σi v_i^TA^TAv_i=\sigma_i^2v_i^Tv_i\\ ||Av_i||^2=\sigma_i^2 so:\\ ||Av_i||=\sigma_i\\
对条件两边同时乘A得到:
AATAvi=σi2Avisetunitvector:  ui=AviσAATui=σi2ui AA^TAv_i=\sigma_i^2Av_i\\ set\,unit\,vector:\;u_i=\frac{Av_i}{\sigma}\\ AA^Tu_i=\sigma_i^2 u_i\\
上面两个过程及其精妙,尤其是下面这个,用ui=Aviσu_i=\frac{Av_i}{\sigma} 进行置换后,得到uiu_iAATAA^T 的特征向量,然后得出结论,存在 ui=Aviσu_i=\frac{Av_i}{\sigma} 使得命题成立,而且u就是AATAA^T的特征向量,并且相互正交:
下面证明u相互正交:
uiTuj=(Avi)T(Avj)=viT(ATAvj)=viT(σ2vj)=0 u_i^Tu_j=(Av_i)^T(Av_j)=v_i^T(A^TAv_j)=v_i^T(\sigma^2v_j)=0
QED

然后老爷子在书上发话了,这是这本书最高潮的部分了,也是基础理论的最后一步了,因为他用到了所有的前面的理论:

  1. 四个子空间的维度(我们上面那个表)
  2. 正交
  3. 正交基来对角化矩阵A
  4. 最后得到SVD A=UΣVTA=U\Sigma V^T

于是我写了一天这篇博客,比之前看书收获了更多,也可能有写纰漏,难免的因为水平有限,而且这个是比较精髓的部分,自然难度也比较大

搜索网络(Searching the Web)

这里讲了个应用,但是我实在不想写了,已经精疲力尽了,所以我打算后面选几个应用写,这个作为候选,这里略

Conclusion

线性代数的高潮算是来了,但是后面还有一个比较有意思的主题,也是很常用的,叫做线性变换,也可以作为切入线性代数的一个切入点,我们这个系列的博客是从线性方程组开始的,当然也可以通过线性变换引出矩阵,我们下一篇来讲解这个,待续。。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. IBatis框架的SQL Map映射文件

    在IBatis框架中,利用一个映射文件来定义需要持久化的对象,在这个文件中SQL语句是最显眼的,这个映射文件的目的就是将SQL映射到对象。下面先看一下映射文件的主要功能: q 定义一个持久化的Java类。 q 映射VO中的变量属性为表字段。 q 根据SQL来持久化对…...

    2024/5/7 22:52:54
  2. ibatis中oracle timestamp 条件查询特别是包括当天的内容

    在ibatis中可以这样实现: <isNotEmpty prepend=" and " property="start_date"><![CDATA[T.CREATED_TIME>=to_date($start_date$,YYYY-MM-DD hh24:mi:ss)]]></isNotEmpty><isNotEmpty prepend=" and " property="…...

    2024/5/7 7:33:03
  3. 高数第九章多元函数微分法及其应用

    第一节 基本概念 重复单变量时的概念,做了进一步扩展罢了。多元函数的连续性。 第二节 偏导数第三节 全微分第四节 多元复合函数的求导法则第五节 隐函数求导公式以上内容都没什么,学过了闭着眼睛都会,和单变量的很相似。 下面的才是重点。第六节 多元函数微分学的几何应用 …...

    2024/5/7 13:51:14
  4. Ibatis-dynamic的用法

    在Ibatis中<dynamic/>是Ibatis的动态查询条件,根据该属性中所包含的元素进行判断是否执行某一条SQL语句。 1、使用dynamic时 select * from Person表<dynamic prepend="where"><isNotNull property="name" prepend="and">nam…...

    2024/5/7 13:03:35
  5. 【高等数学】P3)向量代数与空间解析几何、多元函数微分法及其应用、重积分

    https://www.bilibili.com/video/BV1EW411H7Vj?p=98(098.空间直角坐标系 ~ 140.重积分的应用2)目录7.1 空间直角坐标系7.2 向量及其线性运算7.2.1 向量7.2.2 向量的线性运算加减(三角形法则、四边形法则)数乘(长度的伸缩)(单位向量,标准正交基)共线、共面7.3 向量的数…...

    2024/5/7 19:00:39
  6. 使用iBATIS3.0完成增删改查

    iBATIS3.0和以前的版本有一些改变,不过学过以前版本的再学习3.0应该不是太难,3.0要求JDK1.5支持,因为其中增加了注解和泛型,这些都是JDK1.5才有的。好了废话不多说,先来利用iBATIS3做下简单的增删改查吧。首先到Apache(http://www.apache.org/)网站下载iBATIS3的jar 包,我…...

    2024/5/7 13:13:05
  7. 矩阵分解及其应用

    参考资料:LU分解,维基百科矩阵分解是指将一个矩阵表示为结构简单或具有特殊性质若干矩阵之积或之和。矩阵分解应用极广,常用来解决代数中解决各种复杂的问题。大体可以分为:三角分解 QR" role="presentation">QRQR 分解 满秩分解 奇异值分解三角分解基本…...

    2024/4/21 10:05:44
  8. ibatis设置启用及关闭命名空间

    使ibatis用命名空间能够有效避免sql配置命名冲突,默认为启用状态,可以通过settings标签设置为关闭状态,例如:<settings><setting name="useStatementNamespaces" value="true"/></settings><setting name="useStatementName…...

    2024/4/21 10:05:43
  9. Eclipse添加ibatis DTD文件实现xml的自动提示功能

    因为公司开发环境是在内网不能直接访问互联网,(同事经常漏写ibatis的sqlMap的标签,导致项目启动失败,排查很费劲),所以xml文件的dtd校验不能自动从网上下载。只能通过手工配置dtd格式实现校验。有两种方式。 第一种:通过Public ID方式: window->preferences->xml-&…...

    2024/4/21 10:05:41
  10. 线性代数:第一章 行列式(2)行列式按行(列)展开 克拉默法则

    第三节 行列式按行(列)展开 一.数学概念 余子式和代数余子式 在n阶行列式中,把元素 所在第i行和第j列划去后,留下来的n-1阶行列式叫做元素 的余子式,记作 ,记,叫做元素 的代数余子式。 二.原理,公式 引理 一个n阶行列式,如果其中第i行所有元素除 外都为零,那么这…...

    2024/5/8 0:44:37
  11. apk反编译工具下载

    下载地址apktool下载安装说明 主要是资源文件提取,图片、布局等dex2jar下载地址 从字面上就能理解,将dex转为jarjd-gui下载地址 主要是看jar里面的.class文件,也就是java反编译了。使用说明1、下载好的文件(apktool.bat、apktool_2.3.3.jar),放在一个目录。 2、(如有…...

    2024/5/2 16:34:08
  12. ibatis中integer类型

    假如java代码中设置的返回类型是integer类型,ibatis实际上返回的是BigDecimal,也就是说ibatis转换成integer默认是bigdecimal类型的...

    2024/4/21 10:05:38
  13. 【线性代数】7-2:线性变化的矩阵(The Matrix of a Linear Transformation)

    原文地址1:https://www.face2ai.com/Math-Linear-Algebra-Chapter-7-2转载请标明出处 Abstract: 本篇有点长,内容及其丰富,包括线性变换的矩阵形式以及相关例子(导数和积分),然后详细的讲解了下怎么构造矩阵,也就是矩阵的来源,之后是矩阵相乘的原理,基的变换,最后一波…...

    2024/4/21 10:05:37
  14. ibatis之SqlMapConfig.xml文件的Settings节点参数详解

    SqlMapConfig.xml文件中配置iBATIS应用的自身信息,包括事务处理方式、数据源、数据连接池、映射文件地址。其详细配置请参照:http://shzhengzhangwen.blog.163.com/blog/static/172651173201112385159764/ 这里,详细讲解该文件中settings节点参数的配置<settings cacheM…...

    2024/4/21 10:05:37
  15. 第一个ibatis

    这个ibatis其实就和hibernate一样,也用来解决阻抗不匹配的问题。总的来说会用hibernate就会用ibatis,从官网来看ibatis已经加入了谷歌阵营,版本也升到了3.0.6.配置文件也有了一些差异。这里我们就是用2.3版本的就可以了。可惜官网上找不到了。现在就来学习一下吧 1.去迅雷上…...

    2024/4/21 10:05:36
  16. 离散数学在计算机科学中的应用

    自从我们学院进行软件 工程认证后,期末考试的专业课全部是大题。这次离散数学的最后一题是:利用本学期学到的离散数学的知识阐释其在一个软件工程中的应用。下面说说离散数学的应用。离散数学在数据结构中的应用 数据结构中将操作对象间的关系分为四类:集合、线性结构、树形…...

    2024/4/25 1:15:59
  17. Ibatis插入数据返回ID的方法

    ibatis插入数据返回ID的方法:主要就是利用seelctkey来获取这个ID值,但是oracle和mysql的区别还是很大的oracle的用法<insert id="insertOperation">< selectKey resultClass="long" keyProperty="Id" >select operation_seq.nextv…...

    2024/4/21 10:05:34
  18. 计算机经典书籍总结

    1.计算机科学概论计算机科学概论2.计算机数学基础高等数学线性代数概率论与数理统计离散数学及其应用离散数学教程(北大版)什么是数学具体数学:计算机科学基础3.C语言谭浩强C程序设计C primer plusThe C programming languageC和指针C专家教程C陷阱与缺陷c语言解惑C标准库4.算…...

    2024/4/21 10:05:33
  19. ibatis对MySQL数据库的批量操作

    对于批量操作,iBATIS提供了两种方式:使用iterate标签,进行批量插入操作;使用普通的SQL调用,提交时使用batch提交。 下面一一介绍: 1、使用iterate标签,进行批量插入操作将需要插入的Java Object封装到一个java.util.List集合中,然后调用SQL插入。这种方式主要利用iBATI…...

    2024/5/5 7:08:01
  20. 关于fragment中getView返回为null的解决办法

    如果你在使用Fragment的时候,有时会遇到调用Fragment.getView()的时候,总是返回一个null值。可能出现此问题的原因是,你在Activity中,调用adapter.getItem()来获取当前Fragment。 大概如下 int index= _viewPaper.getCurrentItem();Fragment fragment=_myFragmentAdapter.g…...

    2024/4/29 9:46:13

最新文章

  1. CF 943 (Div. 3) A~E

    文章目录 A Maximize?&#xff08;模拟/枚举&#xff09;B Prefiquence(贪心/双指针)C Assembly via Remainders&#xff08;构造&#xff09;D Permutation Game &#xff08;枚举/贪心&#xff09;E Cells Arrangement&#xff08;构造&#xff09; A Maximize?&#xff08…...

    2024/5/8 6:37:42
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. Go语言map、slice、channel底层实现(go面试)

    slice 切片是一个引用类型&#xff0c;其底层实现是一个结构体&#xff0c;包含以下字段&#xff1a; ptr&#xff1a;一个指向底层数组的指针&#xff0c;指针指向数组的第一个元素。 len&#xff1a;切片当前包含的元素数量。 cap&#xff1a;切片的容量&#xff0c;即底层…...

    2024/5/5 1:45:06
  4. 3d representation的一些基本概念

    顶点&#xff08;Vertex&#xff09;&#xff1a;三维空间中的一个点&#xff0c;可以有多个属性&#xff0c;如位置坐标、颜色、纹理坐标和法线向量。它是构建三维几何形状的基本单元。 边&#xff08;Edge&#xff09;&#xff1a;连接两个顶点形成的直线段&#xff0c;它定…...

    2024/5/8 5:12:31
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/8 6:01:22
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/7 14:25:14
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57