在MATLAB中转置向量/矩阵时,我已经看过并长期使用'
(撇号)运算符。
例如:
>> v = [ 1 2 3 ]'
v =
1
2
3
然而,这是我最近发现的共轭转置,或ctranspose
。
这似乎只涉及涉及复杂数字的情况,如果您想要转换矩阵而不获取共轭,则需要使用.'
opertator。
然后将.'
用于真实矩阵和向量是否是一种好习惯?我们应该怎样教MATLAB初学者?
答案 0 :(得分:24)
有趣的问题!
我绝对会说当你想要转置时使用.'
这是一个好习惯,即使数字是真实的,因此'
也会产生相同的效果。主要原因是:
概念清晰度:如果您需要转置,只需转置。不要投入不必要的共轭。这是不好的做法。您已经习惯于编写'
进行转置,并且不会注意到差异。有一天,当'
应该被使用时,你会写.'
。作为可能的说明,请参阅this question或this one。
<强>未来-proofness 即可。如果将来某一天将您的功能应用于复杂输入,行为将突然改变,您将很难找到原因。相信我,我知道我所说的 1 。
当然,如果您使用的是真实输入,但是对于复杂输入,共轭会有意义,请使用'
。例如,如果要为实数向量定义点积,则可能适合使用'
,因为如果您希望将来使用复数输入,则共轭转置would make more sense。
1 在我早期的Matlab时代,我花了很长时间才追溯到我的代码中的某个问题,结果是使用'
时导致的问题。我应该使用.'
。让我心烦意乱的是,我的教授实际上已经说'
意味着转置!他忘了提到共轭,因此我的错误。我学到的经验教训:'
不是.'
;教授可以告诉你一些完全错误的事情:-)
答案 1 :(得分:12)
我非常偏见:我使用'
的大多数情况纯属“正式”,与数学计算无关。我很可能想要将 vector 像索引序列1:10
一样旋转90度。
我很少将'
用于矩阵,因为它含糊不清 - 您要回答的第一个问题是您想要进行转置的原因?
如果矩阵最初是在错误的方向上定义的,我宁愿定义矩阵,但应该是正确的矩阵,但之后不要将其转动。
要为数学计算转置矩阵,我明确使用transpose
和ctranspose
。因为通过这样做,代码更容易阅读(不必专注于那些小点)和调试(不必关心丢失的点)。像往常一样执行以下作业,例如点积。
答案 2 :(得分:10)
这实际上是许多MATLAB程序员争论的主题。有人说如果你知道自己在做什么,那么你可以继续使用'
如果你知道你的数据是真实的,并使用.'
你的数据很复杂。但是,有些人(例如Luis Mendo)提倡你一定要始终使用.'
这样的事实,这样你就不会感到困惑。
这允许正确处理函数的输入,以防输入这些函数所需的数据变得复杂。有一段时间需要复杂的换位,例如计算复矢量的幅度平方。事实上,她的一个MATLAB摘要中的Loren Shure(我记不清哪一个......)表明这是引入复杂转置的原因之一。
我的建议是,如果您的目标是转置数据,则应始终使用.'
。如果您想进行一些复杂的算术运算,请使用'
和.'
,具体取决于您正在执行的操作/计算。显然,Luis Mendo的良好做法已经让我感到厌烦。
答案 3 :(得分:-1)
这里有两种情况可以区分:
在后一种情况下,情况必须指出哪个是正确的,并且在这种情况下可能只有两个选择中的一个是正确的。最常见的是采用共轭转置,对应s[-1]
,但有些情况下你必须采用直接转置然后,当然,你需要使用'
。
在前一种情况下,我建议不要使用 转置运算符。相反,您应该使用.'
或者只是坚持输入正确,如果不是,则抛出错误。这清楚地将这些“计算机科学”实例与真正的数学实例区分开来。