在MATLAB中使用转置与ctranspose

时间:2014-08-05 23:38:32

标签: arrays matlab matrix

在MATLAB中转置向量/矩阵时,我已经看过并长期使用'(撇号)运算符。

例如:

>> v = [ 1 2 3 ]'

v = 

    1
    2
    3

然而,这是我最近发现的共轭转置,或ctranspose

这似乎只涉及涉及复杂数字的情况,如果您想要转换矩阵而不获取共轭,则需要使用.' opertator。

然后将.'用于真实矩阵和向量是否是一种好习惯?我们应该怎样教MATLAB初学者?

4 个答案:

答案 0 :(得分:24)

有趣的问题!

我绝对会说当你想要转置时使用.'这是一个好习惯,即使数字是真实的,因此'也会产生相同的效果。主要原因是:

  1. 概念清晰度:如果您需要转置,只需转置。不要投入不必要的共轭。这是不好的做法。您已经习惯于编写'进行转置,并且不会注意到差异。有一天,当'应该被使用时,你会写.'。作为可能的说明,请参阅this questionthis one

  2. <强>未来-proofness 即可。如果将来某一天将您的功能应用于复杂输入,行为将突然改变,您将很难找到原因。相信我,我知道我所说的 1

  3. 当然,如果您使用的是真实输入,但是对于复杂输入,共轭会有意义,请使用'。例如,如果要为实数向量定义点积,则可能适合使用',因为如果您希望将来使用复数输入,则共轭转置would make more sense

    1 在我早期的Matlab时代,我花了很长时间才追溯到我的代码中的某个问题,结果是使用'时导致的问题。我应该使用.'。让我心烦意乱的是,我的教授实际上已经说'意味着转置!他忘了提到共轭,因此我的错误。我学到的经验教训:'不是.';教授可以告诉你一些完全错误的事情:-)

答案 1 :(得分:12)

我非常偏见:我使用'的大多数情况纯属“正式”,与数学计算无关。我很可能想要将 vector 像索引序列1:10一样旋转90度。

我很少将'用于矩阵,因为它含糊不清 - 您要回答的第一个问题是您想要进行转置的原因?

如果矩阵最初是在错误的方向上定义的,我宁愿定义矩阵,但应该是正确的矩阵,但之后不要将其转动。

要为数学计算转置矩阵,我明确使用transposectranspose。因为通过这样做,代码更容易阅读(不必专注于那些小点)和调试(不必关心丢失的点)。像往常一样执行以下作业,例如点积。

答案 2 :(得分:10)

这实际上是许多MATLAB程序员争论的主题。有人说如果你知道自己在做什么,那么你可以继续使用'如果你知道你的数据是真实的,并使用.'你的数据很复杂。但是,有些人(例如Luis Mendo)提倡你一定要始终使用.'这样的事实,这样你就不会感到困惑。

这允许正确处理函数的输入,以防输入这些函数所需的数据变得复杂。有一段时间需要复杂的换位,例如计算复矢量的幅度平方。事实上,她的一个MATLAB摘要中的Loren Shure(我记不清哪一个......)表明这是引入复杂转置的原因之一。


我的建议是,如果您的目标是转置数据,则应始终使用.'。如果您想进行一些复杂的算术运算,请使用'.',具体取决于您正在执行的操作/计算。显然,Luis Mendo的良好做法已经让我感到厌烦。

答案 3 :(得分:-1)

这里有两种情况可以区分:

  1. 出于非数学原因进行转置,就像你有一个将数据视为数组而不是数学向量的函数一样,你需要纠错输入才能得到你期望的格式。
  2. 将转置作为数学运算。
  3. 在后一种情况下,情况必须指出哪个是正确的,并且在这种情况下可能只有两个选择中的一个是正确的。最常见的是采用共轭转置,对应s[-1],但有些情况下你必须采用直接转置然后,当然,你需要使用'

    在前一种情况下,我建议不要使用 转置运算符。相反,您应该使用.'或者只是坚持输入正确,如果不是,则抛出错误。这清楚地将这些“计算机科学”实例与真正的数学实例区分开来。