精华内容
下载资源
问答
  • 一般在机器学习的模型训练之前,有一个比较重要的步骤是数据变换。因为,一般情况下,原始数据的各个特征的值并不在一个统一的范围内,这样数据之间就没有可比性。数据变换的目的是将不同渠道,不同量级的数据转化到...

    一般在机器学习的模型训练之前,有一个比较重要的步骤是数据变换

    因为,一般情况下,原始数据的各个特征的值并不在一个统一的范围内,这样数据之间就没有可比性

    数据变换的目的是将不同渠道,不同量级的数据转化到统一的范围之内,方便后续的分析处理

    数据变换的方法有很多,比如数据平滑,数据聚集,数据概化,数据规范化属性构造等。

    本篇文章主要介绍数据规范化,这是一种比较常用,也比较简单的方法。

    数据规范化是使属性数据按比例缩放,这样就将原来的数值映射到一个新的特定区域中,包括归一化,标准化等。

    1,数据归一化

    归一化就是获取原始数据的最大值和最小值,然后把原始值线性变换到 [0,1] 范围之内,变换公式为:

    5494b205c0eb0645f61a32c85622407d.png

    其中:

    • x 是当前要变换的原始值。

    • min 是当前特征中的最小值。

    • max 是当前特征中的最大值。

    • x' 是变换完之后的新值。

    注意:min 和 max 是指当前特征中的最小最大值。 

    所以同一特征之内,最小最大值是一样的。 

    而不同特征之间,最小最大值是不一样的。

    从公式中可以看出,归一化与最大最小值有关,这也是归一化的缺点,因为最大值与最小值非常容易受噪音数据的影响。

    1.1,归一化处理

    比如,我们有以下数据:

    编号特征1特征2特征3
    第1条5465135
    第2条2337869
    第3条6979683

    通过数据可以观察出:

    • Max(特征1) = 69,Min(特征1) = 5

    • Max(特征2) = 796,Min(特征2) = 378

    • Max(特征3) = 135,Min(特征3) = 69

    这里我们用第一条数据来举例,看看是如何变换的。

    • 对第一个数字 5 做变换:(5 - 5) / (69 - 5) = 0

    • 对第二个数字 465 做变换:(465 - 378) / (796 - 378) = 0.21

    • 第三个数字 135 做变换:(135 - 69) / (135 - 69) = 1

    1.2,使用 MinMaxScaler 类

    sklearn 库的 preprocessing 模块中的 MinMaxScaler 类就是用来做归一化处理的。

    首先引入 MinMaxScaler 类:

    >>> from sklearn.preprocessing import MinMaxScaler

    准备要变换的 data 数据,并初始化 MinMaxScaler 对象:

    >>> data = [[5465135], [2337869], [6979683]]>>> scaler = MinMaxScaler() # 默认将数据拟合到 [0, 1] 范围内

    拟合数据:

    >>> scaler.fit(data)

    输出每个特征的最大最小值:

    >>> scaler.data_max_         # 特征最大值array([ 69., 796., 135.])>>> scaler.data_min_         # 特征最小值array([  5., 378.,  69.])

    变换所有数据:

    >>> scaler.transform(data)array([[0.        , 0.20813397, 1.        ],       [0.28125   , 0.        , 0.        ],       [1.        , 1.        , 0.21212121]])

    可以对比我们计算的第一行数据,结果是一样的。

    可以用一个 fit_transform 方法,来替换两个方法 fit 和 transform

    2,数据标准化

    z-score 标准化是基于正态分布的,该方法假设数据呈现标准正态分布

    2.1,什么是正态分布

    正态分布也叫高斯分布,是连续随机变量概率分布的一种,它的数学公式是:

    cd07bf26e373c0c2896d52ef278ee8c7.png

    其中,u 为均值(平均数),σ 为标准差。均值和标准差是正态分布的关键参数,它们会决定分布的具体形态。

    正态分布有以下特点:

    • 正态分布以经过均值 u 的垂线为轴,左右对称展开,中间点最高,然后逐渐向两侧下降。

    • 分布曲线和 X 轴组成的面积为 1,表示所有事件出现的概率总和为 1

    正态分布就是常态分布,正常状态的分布。在现实生活中,大量随机现象的数据分布都近似于正态分布。

    正态分布的分布图为:

    e12538ca8cbedd87798bd6f32984594e.png

    μ 为 0σ 为 1时,正态分布为标准正态分布

    f99376eadf492f21f84365982ae77700.png

    图中的百分数表示所在面积占总面积的百分比。

    2.2,z-score 标准化

    z-score 标准化利用正态分布的特点,计算一个给定分数距离平均数有多少个标准差。它的转换公式如下:

    63d42f0e3ba55f67399733b0e7427ab9.png

    其中 x 为原始值,u 为均值,σ 为标准差,x’ 是变换后的值。

    经过 z-score 标准化后,高于平均数的分数会得到一个正的标准分,而低于平均数的分数会得到一个负的标准分数。

    和归一化相比,z-score 标准化不容易受到噪音数据的影响,并且保留了各维特征对目标函数的影响权重。

    2.3,使用 StandardScaler 类

    sklearn 库的 preprocessing 模块中的 StandardScaler 类就是用来做z-score 标准化处理的。

    首先引入 StandardScaler 类:

    >>> from sklearn.preprocessing import StandardScaler

    准备要变换的 data 数据,并初始化 StandardScaler 对象:

    >>> data = [ [5465135],  [2337869],  [6979683] ]>>> scaler = StandardScaler()

    拟合数据:

    >>> scaler.fit(data)

    输出每个特征的均值和标准差:

    >>> scaler.mean_   # 均值array([ 32.33333333546.33333333,  95.66666667])>>> scaler.scale_  # 标准差array([ 26.94851058, 180.078378  ,  28.39405259])

    变换所有数据:

    >>> scaler.transform(data)array([[-1.01427993, -0.45165519,  1.38526662],       [-0.34633949, -0.93477815, -0.93916381],       [ 1.36061941,  1.38643334, -0.44610281]])

    3,总结

    数据变换的目的是将不同渠道,不同量级的数据转化到统一的范围之内,方便后续的分析处理

    不同的机器学习算法,对数据有不同的要求,所以要针对不同的算法,对原始数据进行不同的转换。

    数据规范化是常用的数据变化方法,包括归一化和标准化等:

    • 归一化:使用特征值中的最大最小值,把原始值转换为 0 到 1 之间的值。

      • 优点:是简单易行,好理解。

      • 缺点:是容易受最大最小值的干扰。

      • 介绍了 MinMaxScaler 类的使用。

    • 标准化:介绍了 z-score 标准化,原始数据经过转换后,符合标准正态分布。

      • 和归一化相比,z-score 标准化不容易受到噪音数据的影响。

      • 介绍了 StandardScaler类的使用。

    数据变换不一定能提高模型的准确度,但是会提高数据的可解释性。

    需要注意的是,对训练数据进行了数据变换之后,在测试模型准确度或者预测数据之前,也要对数据进行同样的数据变换。

    (本节完。)

    a08c571384503c9afb7b70e5eaebcf5e.png

    点击查看往期内容回顾

    决策树算法-理论篇-如何计算信息纯度

    决策树算法-实战篇-鸢尾花及波士顿房价预测

    朴素贝叶斯分类-理论篇-如何通过概率解决分类问题

    朴素贝叶斯分类-实战篇-如何进行文本分类

    计算机如何理解事物的相关性-文档的相似度判断

    c2d5761dcc4a1befee553c60c94f99ef.gif

    欢迎关注作者公众号,获取更多技术干货。

    20c760002740d98b26f6ab717b09806d.png

    9c001c381937061fb2c683a1308ce0e5.gif

    展开全文
  • 如果知道一个数值的标准分数即z-score,就可以非常便捷地在标准正态分布中查到该标准分数对应的概率值。任何数值,只要符合正态分布的规律,均可使用标准正态分布查询其发生的概率。下就是标准正态分布,在...

    正态分布这个概念在统计学中很常见,在做与正态分布有关计算的时候经常会用到标准正态分布表。如果知道一个数值的标准分数即z-score,就可以非常便捷地在标准正态分布表中查到该标准分数对应的概率值。任何数值,只要符合正态分布的规律,均可使用标准正态分布表查询其发生的概率。

    下表就是标准正态分布表,在使用的时候,第一步是先计算数值的标准分数,然后将标准分数四舍五入到小数点后第二位;第二步是在标准正态分布表中的左侧查到直到标准分数的小数点后第一位,然后用顶部的数值查到所对应的标准分数的小数点后第二位。

    3324d15e3cc6f5d00ea15aaa07db671b.png

    比如标准分数为1.16,在表左侧可以查到1.1所在的行,然后再找到0.06所在的列,最后对应的概率值为0.877。这就意味着在正态分布的情况下,如果一个数值的标准分数为1.16,那么该数值所代表的情况出现的概率为87.7%。

    10975bfef497a1909a82770c0e64dee7.png

    以下通过案例来看标准正态分布表的应用。假设某地成年男性的身高数据呈正态分布,平均身高为1.70米,标准差为4厘米。

    问题:

    1.  男性身高超过1.75米的占比为多少?

    2.  男性身高在1.74-1.75米之间的占比为多少?

    3.  如果有20%的男性身高高于某个数值,该数值所对应的身高数据是多少?

    4.   如果有20%的男性低于某个数值,该数值所对应的身高数据是多少

    解题:

    1、先用标准分数即z-score计算公式将1.75米的身高数据转换成标准分数,结果为(1.75– 1.70) / 0.04 =1.25,这样问题就成了:在标准正态分布曲线中标准分数大于1.25的概率是多少?查询标准正态分布表,可以看到1.25的标准分数对应的概率值为0.894= 89.4%,也就是有89.4%的男性身高数据的标准分数不超过1.25,因此有100%-89.4%=10.6%的男性身高超过1.75米。

    92ac84779ae4cc6f4920377f39409c94.png

    2、在问题1中已知身高为1.75米的标准分数为1.25,那么身高为1.74米的标准分数= (1.74 –1.70) / 4 = 1.00,因此只需找到1.00也就是有84.1%的男性身高据的标准分数不超过1.00,因此身高在1.74-1.75米之间的男性占比为0.894-0.841=0.853=5.3%

    67032c2e134f78948f110ab306c2a098.png

    3、如果说20%的男性身高高于某个数值,那就意味着80%的男性身高不超过该数值,因此在标准正态分布表看到概率值为0.800所对应的标准分数为0.84,现在将这个标准分数转换成身高数据,带入z-score的计算公式为0.84=(x-1.70)/0.04,结果为1.7336米,即在全部成年男性中有20%的男性身高高于1.7336米。

    cb3b154071543d13900fe11a1efe7724.png

    4、这个问题的计算思路与前面的问题基本相同,区别只是在于标准分数需要使用负值,因此带入z-score的计算公式后为-0.84=(x-1.70)/0.04,结果为1.6664米,即在全部成年男性中有20%的男性身高低于1.6664

    在各类金融市场中,外汇市场的回报率总体上符合正态分布的规律,因此第二个案例是如何借助标准正态分布表估算外汇汇率。

    圣路易斯联邦储备银行主页上下载2018-7-2至2019-6-28这一年间的欧元/美元汇率,经计算,汇率均值为1.1409,标准差为0.0166

    691d2300fe1b98b893b6483e3bbc804d.png

    标准分数分布如下图所示:

    08d6682ba012054c123db2f318c13d87.png

    问题:

    1.  欧元/美元的汇率在1.17以上的交易日占比为多少?

    2.  欧元/美元的汇率在1.1650-1.17之间的交易日占比为多少?

    3.  如果在5%的交易日中欧元/美元的汇率高于某个水平,该汇率是多少?

    4.  如果10%的交易日中欧元/美元的汇率低于某个水平,该汇率是多少

    解题:

    1、先用标准分数即z-score计算公式将1.1700的汇率数据转换成标准分数,结果为(1.17-1.1409) / 0.0166 = 1.7560,这样问题就变成:在欧元/美元汇率的标准正态分布曲线中标准分数大于1.7560的概率是多少?查询标准正态分布表,可以看到1.7560约等于1.176,所对应的概率值为0.961=96.1%,也就是在过去一年中96.1%的交易天数里欧元/美元的汇率在1.1700以上。

    a3808b19a244d812f95ab1fff28d7658.png

    2、欧元/美元汇率1.1700的标准分数已知,1.1650汇率的标准分数= (1.1650-1.1409) / 0.0166 = 1.4547,因此只需找到1.45

    8610ea8cfa4e4e561a4d79004770a7c8.png

    3、解题思路与前面身高的案例相同,欧元/美元的汇率5%的交易日中高于某个水平,反过来讲也就是说在95%的情况下欧元/美元的汇率没有高于某个水平。在标准正态分布表中0.95的概率值对应的标准分数为1.64,将这个标准分数转换成汇率,带入z-score计算公式为1.64= (x-1.1409)/0.0166,结果为1.1681。也就是说,在2018-7-2至2019-6-28的一年间,当欧元/美元的汇率处于1.1681的时候,在全部交易日中欧元/美元的汇率有5%的概率将高于1.1681

    282b61ba4ddbd9d359d071b66514099b.png

    4、同理,在标准正态分布表查到0.90的概率值所对应的标准分数1.28,带入z-score计算公式后为-1.28=(x-1.1409)/0.0166,结果为1.1196。也就是说,在2018-7-2至2019-6-28的一年间,当欧元/美元的汇率处于1.1196的时候,在全部交易日中有10%的交易日的欧元/美元汇率低于1.1196

    展开全文
  • 2 最小Z型折边中间高度(如图六)Z型折边中间高度受V型槽中心到下模边距离影响,最小折边高度为公式(8):Hmin =(V/2)+ 2.5+ 2t ………(8)不同材料厚度的最小Z型折边中间高度Hmin见6。3 最大Z型折边反边...

    31289a39438f455937ecaee0c0168724.png

    1 L折最小折边尺寸为公式(7)(如图五):

    Lmin =(V/2)+ 2 + t ………(7)

    1577fa68cc0abe4dbdf5984bee8c28a5.png

    不同材料厚度的最小折边尺寸Lmin(见表5)。

    d109b95ee825510607845406791cd6e3.png

    2 最小Z型折边中间高度(如图六)

    Z型折边中间高度受V型槽中心到下模边距离影响,最小折边高度为公式(8):

    Hmin =(V/2)+ 2.5+ 2t ………(8)

    49fe46782cc233dee031c37e89427bce.png


    不同材料厚度的最小Z型折边中间高度Hmin见表6。

    493d7b84f48e9a01179adbfe20f5a4e3.png

    3 最大Z型折边反边尺寸

    3.1 最大Z型折边反边尺寸(如图六),通常的开关柜左门为Z型折边,其反边尺寸受下模及模座高度影响,最大反边高度为公式(9):

    Lmax = 59 + t …………(9)

    3.2 当Z型折边中间高度小于30时,不同材料厚度的Z型折边最大反边尺寸见表7,当Z型折边中间高度较大时,受折弯机下模座不同部位影响,其反边最大尺寸应现场确定。

    1450cabd09e71a80578b5b6794d10cb4.png

    4 U型折边

    4.1 (如图七)受机床及模具影响,U型折边宽度H1不能太小,高度H2不能太大;当H2满足表5的最小折边尺寸时,H1最小值公式为(10):

    H1 = 12 + 2t …………………(10)

    1ef37aa13c542cb9703c70b7bd9ac132.png


    41.1 H1的数值见表8

    3b9abcce7de3947e7bfbeff68c685429.png

    4.1.2 当H1值较大时,应满足:H2 < H1- 35 。

    4.2 四面折边最大高度H

    受模具影响四面折边最大高度Hmax < 175(如图八) 。

    7dfff34ce8488caf387d47b9279d9759.png
    展开全文
  • 变换(transform)就是这样一个操作: 接收实体(points, vectors, colors等),并以某种方式转化它们。本文会讲到平移、旋转、缩放、反射和错切矩阵以及它们之间的结合。 A transform is an operation that takes ...

    变换(transform)就是这样一个操作: 接收实体(points, vectors, colors等),并以某种方式转化它们。本文会讲到平移、旋转、缩放、反射和错切矩阵以及它们之间的结合

    A transform is an operation that takes entities such as points, vectors, or colors and converts them in some way.

    对于计算机图形学从业者,掌握变换(transform)是极其重要的。掌握了transform,你就可以摆放物体(objects)、灯光(lights)和相机(cameras)的位置,变换(reshape)它们的形状,并使(animate)它们动起来。懂了transform,你就可以确保所有的计算是在同一个坐标系(the same coordinate system)中进行,而不是错误地使用坐标系。你还可以以不同的方式,把物体(objects)投影到平面上。说的这些只是transfrom的小部分作用,但足以说明transfrom在实时图形学(real-time graphics),乃至所有图形学(any kind of computer graphics)中扮演的重要角色。

    线性变换是一种保留向量加法和标量乘法的运算,即:

    例如,

    是一个变换,接受一向量x,用标量5乘以向量的每一个元素。为了证明它是线性的只需要证明它满足方程4.1和4.2。显然方程4.1是满足的,它就是简单的乘法分配律。方程4.2也是满足的,就是简单的乘法结合律。此函数就是一个简单的
    缩放变换,可以缩放物体的尺寸。旋转变换是另一种线性变换。缩放变换旋转变换,事实上所有的对于3D向量的线性变换,都可以表示成一个
    的矩阵。

    然而,3D矩阵的size还是不够大到足以完成所有对3D物体的变换。因为还有平移变换,一种常用的非线性变换,例如:

    。在计算机图形学中,我们时常想要把各种变换结合起来,如先把一个物体缩小一半,再绕某个轴旋转90度,再平移到某个位置。但这种结合无法只用一个简单的3D矩阵实现。

    为了结合线性变换和平移变换可以使用仿射变换(affine transform),通常存储在一个

    的矩阵中。仿射变换是一种变换,即先完成线性变换,然后再完成平移变换。为了表示四维向量我们使用齐次坐标,用统一的方式表示点和方向。一个方向向量表示为
    ,而一个点表示为

    所有的平移、旋转、缩放、反射和错切矩阵都是仿射的。仿射变换的主要特征是保持了平行性,即给平行线施加仿射变换后,得到的仍是平行线。但仿射变换不一定保持长度(lengths)和角度(angles)不变。一个仿射变换可能是上面说到的单个仿射变换的连接序列。

    All translation, rotation, scaling, reflection, and shearing matrices are affine.

    aed6d5e41809ec1a40758529f86d0fa2.png
    表 4.1 本章讨论到的大部分变换总结

    4.1 基本变换(Basic Transforms)

    本节会描述最最常见的变换(见表4.1),例如:平移(translation),旋转(rotation),缩放(scaling),错切(shearing,台湾译作推移),变换连接(transform concatenation),刚体变换(rigid-body transform),法线变换(normal transform),逆的计算(computation of inverses)。

    4.1.1 平移(Translation)

    平移表示点的位置从一处变到另一处,用平移矩阵T表示。设

    表示平移向量,即各分量的平移量。则:

    给定一个点

    ,对其施加平移矩阵,得到新的点
    ,明显是由
    平移得到的。

    而对于一个方向

    其不会受平移矩阵影响,因为方向不会被平移(矩阵乘法计算一下就知道了)。

    平移矩阵的逆矩阵为:

    注意,此处的矩阵使用的列优先(row-major)形式,在进行平移运算时要这样:

    ;也存在另一种形式的平移矩阵,即把平移向量放在矩阵的最后一行,这种被称为行优先形式(
    row-major),如在DirectX中,平移运算变成这样:
    。(这里
    都是列向量,
    表示
    的转置,即行向量)。

    4.1.2 旋转(Rotation)

    旋转变换用一个给定的旋转角度和过原心的旋转轴来旋转一个向量(位置或方向)。和平移矩阵一样,它是一个刚体变换(rigid-body transform),即它保持变换后点之间的距离不变,保持handednes不变(即不会造成左右交换)。

    关于旋转矩阵的推导及其与四元数表示旋转的关系,见这篇笔记: 四元数和旋转(Quaternion & rotation),比较详细。

    在二维空间,很容易推导出旋转矩阵。假设我们有一个向量

    ,我们可以把它参数化为:
    。如果我们打算使它逆时针旋转
    弧度,则我们会得到向量
    。利用三角函数变换公式可以得到:

    即二维空间中的旋转矩阵为

    在三维空间中常用的旋转矩阵为

    ,它们分别可以把一个向量绕x,y,z轴旋转
    弧度。它们的值为:

    对于上面的三个旋转矩阵,删除最底部的行和最右侧列,可以得到3个

    的旋转矩阵,它们的迹是一个常量,不依赖于旋转轴:

    N阶矩阵的迹是指矩阵对角线上元数的和

    这三种轴变换矩阵结合(即矩阵相乘)起来可以表示任意旋转矩阵,稍后会说到这一点。

    所有旋转矩阵都是正交矩阵并且它们的行列式值都为1。

    在图形学中常用到正交矩阵,正交矩阵的逆矩阵和转置矩阵相同。

    旋转矩阵的逆矩阵:

    举例: 绕一个点旋转物体

    3003919d36400f621d541d52e5fcbcef.png
    图4.2 绕一点p旋转物体

    如图4.2所示,有一个不规则物体,其上有一点

    ,要绕点
    旋转物体,则可按如下步骤进行:
    1. 对物体施加平移变换
    2. 对物体施加旋转变换
      ,这是真正的旋转部分
    3. 对物体施加平移变换

    则把这三步的变换矩阵“结合”起来就得到了最终的变换矩阵:

    注意这三个矩阵的顺序,要按照从右往左的顺序读,先发生右边的变换。

    4.1.3 缩放(Scaling)

    一个缩放矩阵

    用系数
    分别沿着x, y, z方向缩放实体(entity, 即一个向量,可能表示物体)。缩放矩阵可以用放大或缩小物体。

    如果

    的值为1,则在
    方向上不会发生缩放。如果
    ,即三个方向上的缩放量一样,则称为
    uniform (或isotropic) scaling,否则称为nonuniform (或anisotropic) scaling。缩放矩阵的逆矩阵为

    如果

    中有一个或三个分量的值为负数,则得到一个
    反射矩阵(reflection matrix)或镜像矩阵(mirror matrix)。如果有两个分量的值为负,则导致旋转
    弧度。注意一个旋转矩阵与一个镜像矩阵相乘,得到的仍然是镜像矩阵。如下面得到的是一个镜像矩阵:

    镜像矩阵通常需要特殊对待。例如,一个顶点按逆时针顺序分布的三角形被一个镜像矩阵变换后得到的是一个顺时针的三角形。这个顺序的改变会导致不正确的光照和错误面片剔除(backface culling)出现。判断一个矩阵是镜像矩阵的方法: 计算矩阵左上角的

    子矩阵的行列式,如果值为负,则是镜像矩阵,如上面方程4.12:

    注意,缩放矩阵

    只能对沿x, y, z轴的缩放有效。如果在别的方向进行缩放,则需要一个复合变换矩阵。假设缩放是沿着正交、右手坐标系的向量
    进行。首先构造矩阵
    来改变基底:

    整体思路就是把原始坐标系变换到标准坐标系,然后进行缩放变换,再从标准坐标系变换到原始坐标系。变换矩阵为:

    4.1.4 错切(Shearing)

    另一类变换是错切变换。例如,错切变换可以用于在游戏中扭曲整个场景,创建一种迷幻效果,或者也可用于扭曲模型的外观。有六个基本的错切变换矩阵:

    。第一个下标用于表示哪一个坐标被错切矩阵改变,第二个下标表示完成错切的坐标。

    的值如下:

    可以从方程4.15中观察到两个下标可以用于确定参数

    的位置:
    对应第一行,即索引为0的行,
    对应第3列,即索引为2列。所以,
    应放在矩阵(0, 2)处。用这个错切矩阵乘以一个点
    产生的结果为:
    。下面图4.3清晰地说明了这个错切矩阵施加在一个单位正方形上的效果。在图4.3中y, z轴的值不受影响,而x轴的值为旧的x轴加上
    乘以z的值,结果正方形变成了倾斜了,成了一个平行四边形。可以注意到变换后面积保持不变(阴影部分或者根据平行四边形面积计算公式就知道了)。

    894d022078e81ad91f59395aec652d34.png
    图4.3 错切变换一个单位正方形

    错切矩阵

    逆矩阵:

    也可以用下面的矩阵表示分别用z轴错切x, y轴:

    方程4.16中两个下标都用于表示被错切的坐标(使用第三个坐标,即z)。可拓展为:

    ,此处
    用于索引第3个坐标。
    注意:任何错切矩阵的行列式为1,即
    ,这是一个体积保持不变的变换(volume-perserving transformation)

    4.1.5 变换连接(Concatenation of Transforms)

    由于矩阵乘法不遵守交换律,这些变换矩阵相乘的顺序很重要。因此变换连接(concatenation of transforms)是顺序依赖的(order-dependent)。

    举个例子,考虑两个矩阵

    。其中,
    把x坐标放大为原来的两倍,y坐标缩小为原来的一半,z坐标不变。而
    绕z轴逆时针旋转
    弧度。这两个矩阵可以按两种方式相乘,而结果却大不相同,如下面图4.4所示。

    05ac1d4f496b84ce9fea4ccc1640b9a5.png
    图4.4 矩阵乘法具有顺序依赖性。顶部和底部是两种变换顺序,导致最终的结果不一样。

    显而易见,把一个矩阵序列通过矩阵乘法转换成单个矩阵的好处是提升计算效率。一般的变换顺序是先缩放,再旋转,最后平移,合成一个矩阵就是:

    实际计算时,是这样的(按括号顺序):

    别外需要注意的是,矩阵乘法虽然不遵守交换律,但遵守结合律(associative)。所以可以对连接的变换矩阵进行分组计算:

    其中

    是刚体变换部分,可能你只想计算这部分一次。

    4.1.6 刚体变换(The Rigid-Body Transform)

    什么是刚体变换呢?举个例子,你从课桌上拿了一支钢笔,然后放进书包里了,则这只钢笔只是朝向和位置变了,而钢笔的形状没有发生变化。这样只有平移和旋转组成的变换称为刚体变换(rigid-body transform)。刚体变化具有保持长度(lengths)、角度(angles)和handedness不变性。

    任意刚体变换矩阵

    可以被写作一个平移矩阵
    ,和一个旋转矩阵
    的连接。因此:

    刚体变换矩阵

    的逆矩阵为
    。即计算逆矩阵时只需要把左上角的
    子矩阵设置为
    的转置矩阵,右边最后一列的平移分量变号。

    举例: Orienting the Camera (调整照相机朝向)

    在图形学中一个常见的任务是调整照相机的朝向使它看向某个位置。假设照相机位于点

    ,而我们想要照相机看向目标
    ,给定了一个上向量(up direction)
    ,一切如下面图4.5所示。

    40a699d7581882676400afe7606c7628.png
    图4.5 Orient Camera

    我们需要计算一个坐标基,由三个向量

    组成。其中视线向量
    ,即一个归一化的(normalized)从目标点指向照相机位置的向量(和图4.5中标识的v的方向相反)。右向量(A vector looking to the "right")
    。而
    经常不保证是精确向上的,因此最终的上向量为
    ,可以确保
    是归一化的,因为
    都是规一划的且互相垂直。

    构建相机变换矩阵

    ,基本思路是平移所有物体使相机位于原点(0, 0, 0),然后改变坐标基,使得
    与(1, 0, 0)对齐,
    与(0, 1, 0)对齐,
    与(0, 0, 1)对齐。
    相机变换矩阵就是把物体从世界坐标系变换到相机坐标系的变换矩阵。所谓相机坐标系是指以照相机为原点的坐标系,如图4.5中以
    组成的坐标系。关于各种坐标系变换的可以看这篇文章: 图形渲染管线简介

    最终构造出来的相机变换矩阵(camera transform matrix):

    注意当连接平移矩阵(translation)和变基矩阵(change of basis)时,平移矩阵要放在右边,因为要先完成平移操作。

    思考一个问题:为什么方程4.20中的变基矩阵(change of basis)长这样?

    答案:变基矩阵(change of basis,此时只关注其左上方的

    子矩阵)的作用就是把相机坐标系的坐标轴从
    变换到(1, 0, 0), (0, 1, 0), (0, 0, 1)(这三个都是列向量)。考虑到要把
    (normalized vector, 长度为1)变到(1, 0, 0),而
    ,所以用变基矩阵(change of basis)乘以
    就得到了(1, 0, 0),所以变基矩阵(change of basis)的第一行的元素必然是
    ,且第二行或第三行的元素组成的向量必须与
    垂直。依次类推可以得到第二行的元素必然是
    ,第三行的元素必然是
    。这样就得到了方程4.20中的变基矩阵(change of basis)部分。

    4.17 法线变换(Normal Transform)

    一个变换矩阵可用于一致地(consistently)变换点、线、三角形和其他几何图形(geometry)。这同一个矩阵也可以变换这些直线或三角形表面的切线。然而,这个矩阵不能总是变换表面法线(和顶点光照法线)。下图4.6解释了用这个矩阵来变换法线可能得到的结果。

    0888400b2365fbbb0df368a18d71f211.png
    图4.6 左边是原始几何体及法线。中间是用缩放矩阵使模型沿x轴缩放0.5,然后直接使用这个缩放矩阵变换法线,得到错误的法线。右边是用正确的法线变换矩阵得到的正确法线。

    传统上(或理论上)法线变换矩阵是对应几何体的原始变换矩阵的逆的转置。为什么是原始变换矩阵的逆的转置?其证明可以参考这篇文章: 渲染管线中的法线变换矩阵,推导较为详细。

    这个方法通常都能正常工作。但是完整地计算矩阵的逆是不必要的,而且偶尔原始变换矩阵是没有逆矩阵的。我们知道一个方阵的逆阵是该方阵的伴随矩阵除以该方阵的行列式。即伴随矩阵和逆矩阵只差一个系数(即只影响变换后法线的长度),而伴随矩阵总是存在的,所以我们可以用伴随矩阵的转置来作为法线变换矩阵。注意变换得到的新法线不一定是单位长度的,需要进行归一化。

    伴随矩阵总是存在,伴随矩阵除以原矩阵的行列式得到逆矩阵,便如果(奇异矩阵)行列式为0,则逆矩阵就不存了。

    实际上为一个

    矩阵计算完整的伴随矩阵,代价也是昂贵的,而且通常也是不必要的。既然法线是一个向量(而不是一个点),则平移变换不会影响到它。另外,大部分模型变换矩阵是仿射变换矩阵,它们不会改变被变换的齐次坐标的w分量,即不会进行投影操作。在这种环境下,我们只需要计算原始模型变换矩阵的左上角的
    子矩阵的伴随矩阵。

    甚至计算这个左上角的

    子矩阵的伴随矩阵经常也不是必需的。比如说原始的模型变换矩阵是完全由平移、旋转以及统一缩放(uniform scaling)组成的,没有拉伸或挤压(no stretching or squashing)。平移不影响法线。而uniform scaling只影响法线长度。剩下的就只是一堆旋转变换了,它们最终可以合成(矩阵相乘)一个单纯的旋转变换(即合成一个旋转矩阵),而没有别的变换了。

    在上面我们已经知道模型变换矩阵的逆矩阵的转置矩阵可以用于变换法线。而一个旋转矩阵的转置矩阵也是它的逆矩阵。所以对应的法线变换矩阵主是模型变换矩阵本身(即模型旋转变换矩阵的逆矩阵的转置矩阵仍是该旋转变换矩阵)。

    最后,并不总是要完全的归一化变换得到的新法线。如果只是对模型施加了平移和旋转变换,则法线的长度不会变化,新法线不用作归一化(normalizing)。如果一系列的uniform scalings被施加在模型上,总的缩放因子可直接用于归一化产生的法线。例如,如果我们知道一系列uniform scalings使用物体缩放成原来的5.2倍,则变换后的法线可以除以5.2以实现归一化。或者直接把创建的法线变换矩阵除以5.2,得到的就是归一化后的法线。

    注意,如果模型变换后要重新计算法线(如用三角形边的叉积),则不需要考虑法线变换了。

    4.1.8 逆矩阵的计算(Computation of Inverses)

    很多情况下需要计算(变换矩阵的)逆矩阵,例如,改变坐标系的正反面。根据一个变换(transform)可用的信息,可以用下面三种方法之一方便地计算逆矩阵。

    • 如果矩阵是表示单个变换或者一系列给定参数的简单变换,则可以通过使用"反向参数"(inverting the parameters)和逆转矩阵乘法顺序来得到逆矩阵。例如,一个变换矩阵为
      ,则其逆矩阵为
    • 如果是正交矩阵(orthogonal),则
      ,即转置矩阵就是逆矩阵。任意一系列旋转变换可以合成单个旋转变换,即对应一个旋转矩阵,旋转矩阵是正交的。
    • 如果什么都不知道,就只能使用伴随矩阵除以原矩阵行列式得到逆矩阵,或者使用克莱姆法则(Cramer's rule), LU decomposition,或者高斯消元法(Gaussian elimination)。克莱姆法则和伴随矩阵法通常作为首选,因为它们具有更少的分支操作。在现代计算机架构中应该尽量避免使用"if"。

    在优化时,也可以考虑使用优化逆矩阵的计算方法。例如,如果要求的逆矩阵是用来变换一个向量(一个方向,而不是点),则只需要计算原矩阵的左上角

    的子矩阵。

    References:

    1. Real-Time Rendering 4th 第4.1节。
    2. 渲染管线中的法线变换矩阵
    3. 图形渲染管线简介
    4. 证明两条平行线可以相交?
    5. 四元数和旋转(Quaternion & rotation)
    展开全文
  • 坐标空间的变换是三维图形学中一个绕不过去的知识点,在编写shader的时候经常会用到。在渲染流水线中,我们无法只靠一个坐标空间就完成所有的事情,使用多个坐标空间来表示三维数据既符合了人类在编辑三维场景时对三...
  • 但我们为什么要进行傅里叶变换,面对枯燥的数学公式,很少有人能深入的思考这个问题,本篇我们就用形象的图形来说明这一点,浅显易懂,容易理解傅里叶级数可以把任意一个周期函数分解成无穷多个正弦或余弦波,傅里叶...
  • 之前专栏介绍过如何通过Replica Wormhole推导出island公式的论文,不过只介绍了一个简单模型,这个模型和Almheiri等人最早的JT引力下的Setup有一点微小的区别,为了更清楚的得到Almheiri等人最初提出的公式,可以...
  • 在整体坐标系(x,y,z)中,子单元内任一点的坐标用形函数表示: 回忆一下,形函数的另一个作用,反映单元的位移形态: 单元坐标变换公式和单元位移函数中都用到了形函数,它们可以是自然坐标下的一次、二次、三次...
  •   上一篇文章讲述了统计方法的决策树,其中参数假设条件有...本文介绍一些数据形态变换、数据标准化的一些常规方法,以及其在R语言中的实现途径。方法和实现途径没有完全的一一对应,但在文中可以找到。1 数据形态...
  • 傅里叶、拉普拉斯、z变换是信号与系统这门学科的灵魂。这三种变换既有联系,又有区别。无论你的专业是通信工程、电子信息工程、电气工程及其自动化、计算机科学...都需要用到这三种变换来对具体过程具体分析。可以...
  • 现在考察旋转变换是否为刚体运动,仍然如第一种情况那样设立直角坐标系,令物体上两个点分别为X(x1,x2)和Y(y1,y2),运动后对应的点分别为Z(z1,z2)和E(e1,e2),如图(2) 图(2) 旋转变换 令给定的角度为φ ,现在仍然...
  • MY BLOG DIRECTORY:YivanLee:专题概述及目录​zhuanlan.zhihu.comINTRODUCTION:游戏中常常用欧拉角来进行旋转变换,欧拉角优点非常明显,符合人类正常认知便于理解,但是却有一个万向锁问题。所以为了稳妥起见很...
  • 学过数分的朋友应该都很熟悉这两个常见式子:泰勒级数: 欧拉-麦克劳林公式:泰勒级数与泰勒公式众所周知,泰勒级数被定义为 。这个级数常用于近似普通的函数。然而,在很多应用场景中我们都无法直接去计算这个无穷...
  • 我们知道数学中的三大变换:傅里叶变换,拉普拉斯变换,Z变换贯穿于整个信号处理与复变函数,拉普拉斯变换将傅里叶变换在频域不能解决的问题推广到复频域,所以其应用也更为广泛。拉普拉斯变换是如何得到的呢?首先...
  • 最近学习数字信号处理,重新复习了一下高数, 摘录几个基本要点以备忘: 1. 一切源于cosθ和sinθ的正交性, 即cosmθ*sinnθ 在...3. 欧拉公式e^(iθ)=cosθ+isinθ 简化了复数的表达和运算. 4. 任何具有周期波动特性
  • ①文件中含有拉普拉斯变换,离散傅里叶变换,连续傅里叶变换以及z变换的常用变换对以及基本性质; ②对于经常忘记这些公式以及性质的人来说非常有帮助; ③PDF格式可打印...
  • 使用X-Y-Z三维坐标来表示图像信息,其中 X-O-Y平面表示图像的本身的平面,Z轴的值是对应像素点的颜色值,使用二元函数表达式可以方便的表达函数的 z=f(x,y),其中x表示横轴像素坐标位置,y表示是纵轴像素坐标位置,z...
  • 文档目录*1.高等数学**第一部分:基本导数公式...信号与系统****连续信号的时域对应的傅里叶变换与Laplace变换**时域离散的傅里叶变换DFT与Z变换****三种常用形式的变换对****双边的Laplace变换与Z变换对应**卷积积..
  • 传输线理论相关公式

    2020-09-04 13:17:08
    当Δz→0时,着重研究时谐情况,经过变换可得: 求其上式的二阶常系数齐次线性微分方程, 写成矩阵形式可得, 在终端边界条件下(如下图所示),即 %利用MATLAB平台进行符号矩阵的计算,简便地
  •  《复变函数与常用变换/高等学校教材》内容包括:复数与复变函数,解析函数,复变函数的积分,级数,留数,保形变换,傅里叶变换,拉普拉斯变换,z变换等9章。每章都配有应用实例和巩固该章内容的例题及习题,章末...
  •  《复变函数与常用变换/高等学校教材》内容包括:复数与复变函数,解析函数,复变函数的积分,级数,留数,保形变换,傅里叶变换,拉普拉斯变换,z变换等9章。每章都配有应用实例和巩固该章内容的例题及习题,章末...
  • 但四元数的表达方式是唯一的,所以针对不同的设备,如果用欧拉角表示角度,一定得确定是用的哪种旋转顺序,目前使用最多的是ZYX,即先旋转Z轴,再旋转Y轴,再旋转X轴。但是百度apollo用的是ZXY坐标系,这里要特别...
  • 1.6.1 创建引用其他工作中的数据的公式 28 1.6.2 创建引用其他工作簿中的数据的公式 29 1.6.3 创建对多个工作中相同单元格区域的三维引用 30 1.6.4 更新跨工作簿引用的公式 31 1.7 审核公式 31 1.7.1 使用...
  • 自动控制原理

    2013-07-10 17:01:34
    自动控制的常用公式介绍,拉氏变换z变换及傅里叶变换
  • 四元数是一个高阶复数,它可以表示三维空间绕任意旋转轴旋转的变换。...利用欧拉角也可以实现一个物体在空间的旋转,它按照既定的顺序,如依次绕z,y,x分别旋转一个固定角度,使用roll,yaw ,pitch分别
  • 周期为3,第一张表由密钥字产生(密钥字自拟),第二张表由洗牌法产生(字母a~z与数字0~25一一对应),第三张表由公式法产生(Z26上的一一变换)。请输入待加密文本文件名以源程序文件夹下的TXT文档为准
  • 直方图匹配的巧妙之处即构造两个变换,s = T(r),s = G(z),得到 T(r) = G(z); 公式1 公式1为基本函数,为了得到T(r)和G(z)的具体表达形式,则应结合上一节的转换公式,让s的概率密度为,得到 公式2...
  • 设计一个周期3的多代替密码并予以实现,要求:第1个由密钥字法产生(密钥字自拟),第2个由洗牌法产生(注意,字母a~z与数字0~25一一对应,洗牌法即相当于实验一的方法1(n=25)),第三个公式法产生...
  • 图形学图形消隐

    2013-05-04 10:58:37
    平行投影中正投影的投影变换公式及矩阵,要求以XOY平面为投影平面,Z轴正方向为视线方向。 (3)窗口-视区变换的实现 窗口大小的选取——一般将所有图形都取在窗口内;注意投影变换时投影平面的选取,投影平面上的...

空空如也

空空如也

1 2 3
收藏数 55
精华内容 22
关键字:

z变换公式表