在MATLAB中使用转置与ctranspose

在MATLAB中转置vector/matrix时,我已经看到并长时间使用' (撇号)运算符。

例如:

 >> v = [ 1 2 3 ]' v = 1 2 3 

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

这似乎只在涉及复数时才重要,如果你想转置一个matrix而不得到共轭,你需要使用.' opertator。

这是不错的做法.' 对于真正的matrix和向量呢? 我们应该教什么MATLAB初学者?

有趣的问题!

我肯定会说这是很好的做法.' 当你只是想转置,即使数字是真实的,因此'会有同样的效果。 主要的原因是:

  1. 概念清晰 :如果您需要转置,只需转置。 不要投入不必要的结合。 这是不好的做法。 你会习惯于写作'转置,并不会注意到不同之处。 有一天,你会写'时” .' 应该使用。 作为可能的例子,看这个问题或这个 。

  2. 面向未来 。 如果将来有一天你将自己的function应用到复杂的input中,行为会突然改变,你将很难find原因。 相信我,我知道我说什么1

当然,如果你使用实际的input,但是对于复杂的input来说,共轭是有意义的,那么就使用' 。 例如,如果您正在为真实向量定义一个点积,则可能适合使用' ,因为如果将来要使用复杂input,则共轭转置将更有意义 。

1在我早期的Matlab时代,我花了相当长的时间来追溯代码中的某个问题,结果是使用'我应该使用'时候.' 真正让我不高兴的是,这是我的教授实际上说的'意思是转置! 他忘记提到这个共轭,因此我的错误。 我学到的教训是: '不是” .' ; 和教授可以告诉你的事情是明显错误的:-)

我非常偏见的观点:我使用'大多数情况都是纯粹“forms的”,也就是与math计算无关。 最有可能我想旋转索引序列像索引序列1:10 90度。

由于模糊不清,我很less使用' matrix” – 您要回答的第一个问题就是为什么要进行转置?

如果matrix最初是在一个错误的方向上定义的,我宁愿将它定义为正确的matrix,但是不能把它转向后面。

为了转置matrix进行math计算,我明确使用了transposectranspose 。 因为这样做的代码更容易阅读(不必专注于这些小点)和debugging(不必关心丢失的点)。 像往常一样做点工作如下的工作。

这实际上是许多MATLAB程序员的争论话题。 有人说,如果你知道自己在做什么,那么你可以继续使用'如果你知道你的数据是纯粹的真实的,并使用.' 如果你的数据很复杂。 但是,有些人(比如路易斯·门多 )主张你应该使用这个事实.' 所有的时间,这样你就不会感到困惑。

这样可以正确处理input到函数中,以防input到这些函数中的数据变得复杂。 有一段时间需要复杂的换位,比如计算一个复数vector的幅度平方。 事实上, Loren Shure在她的一个MATLAB文摘(我不记得是哪一个…)中说这是引入复杂转置的原因之一。


我的build议是你应该使用.' 总是如果你的目标是转置数据。 如果你想做一些复杂的算术,那就用'.' 取决于你在做什么操作/计算。 很显然,路易斯·门多的良好实践已经磨灭了我。

这里有两种情况需要区分:

  1. 以非math原因进行转置,就像你有一个将数据视为数组而不是math向量的函数,并且需要使用您的错误更正input以获得您期望的格式。
  2. 以转置为math运算。

在后一种情况下,情况必须规定哪一种是正确的,在这种情况下,可能只有两种select中的一种是正确的。 大多数情况下,将采取共轭转置,这对应于' ,但有些情况下,你必须采取直接转置,然后,当然,你需要使用.'

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