关于数组:在MATLAB中使用转置与ctranspose

Using transpose versus ctranspose in MATLAB

在MATLAB中对向量/矩阵进行转置时,我已经很长时间看到并仅使用'(撇号)运算符了。

例如:

1
2
3
4
5
6
7
>> v = [ 1 2 3 ]'

v =

    1
    2
    3

但是这是我最近发现的共轭转置,或者是ctranspose

这似乎仅在涉及复数时才重要,如果要在不获取共轭的情况下转置矩阵,则需要使用.'运算符。

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


有趣的问题!

我绝对会说,即使数字是实数,使用.'也是一个好习惯,即使数字是实数,因此'也会产生相同的效果。造成这种情况的主要原因是:

  • 概念清晰:如果需要移调,只需移调即可。不要抛出不必要的变化。这是不好的做法。您将习惯于编写'进行转置,并且不会注意到差异。有一天,您应该在使用.'时写'。作为对此的可能说明,请参见此问题。

  • 耐久。如果将来有一天您将功能应用于复杂的输入,则行为将突然改变,并且将很难找到原因。相信我,我知道我在说什么。

  • 当然,如果您使用的是实数输入,但是对于复杂的输入来说,共轭是有意义的,请使用'。例如,如果要为实向量定义点积,则使用'可能是合适的,因为如果将来要使用复杂的输入,则共轭转置会更有意义。

    1在Matlab早期,我花了相当长的时间来追溯我的代码中的某个问题,这原来是我应该使用.'时使用'引起的。真正让我难过的是,我的教授实际上说过'意味着换位!他忘了提到共轭,因此也忘了我的错误。我吸取的教训:'不是.';教授们会告诉你明显是错误的事情:-)


    我非常有偏见的观点:我使用'的大多数情况都是纯粹的"形式",也与数学计算无关。我最有可能要将索引序列1:10之类的向量旋转90度。

    由于模棱两可,我很少使用'进行矩阵运算-您要回答的第一个问题是为什么要进行转置?

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

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


    这实际上是许多MATLAB程序员之间争论的话题。有人说,如果您知道自己在做什么,那么可以继续使用',如果您知道数据是真实的,则使用.',如果数据很复杂。但是,有些人(例如Luis Mendo)提倡这样一个事实,即您始终应该始终使用.',以免引起混淆。

    这样可以正确处理对函数的输入,以防您为这些函数输入的期望数据确实很复杂。有时需要复杂的转置,例如计算复杂矢量的大小平方。实际上,Loren Shure在她的MATLAB摘要之一(我不记得是哪一个...)中指出,这就是引入复杂转置的原因之一。

    我的建议是,如果目标是转置数据,则应始终使用.'。如果要执行一些复杂的算术运算,请根据正在执行的运算/计算使用'.'。显然,路易斯·门多(Luis Mendo)的良好作法使我丧心病。


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

  • 出于非数学原因进行转置,例如您有一个将数据视为数组而不是数学矢量的函数,并且需要进行纠错输入才能以期望的格式获取它。
  • 将转置作为数学运算。
  • 在后一种情况下,情况必须指示哪种是正确的,并且在这种情况下,可能只有两种选择中的一种是正确的。最常见的是采用与'对应的共轭转置,但是在某些情况下,您必须进行直接转置,然后当然需要使用.'

    在前一种情况下,建议不要使用任何转置运算符。相反,您应该使用reshape或只是坚持要正确进行输入,否则请抛出错误。这清楚地将这些"计算机科学"实例与真正的数学实例区分开。