在MATLAB中使用转置与ctranspose

leg*_*gas 26 arrays matlab matrix

在MATLAB中转置向量/矩阵时,我已经看过并使用了'(撇号)运算符很长一段时间.

例如:

>> v = [ 1 2 3 ]'

v = 

    1
    2
    3
Run Code Online (Sandbox Code Playgroud)

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

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

那么使用.'真实矩阵和向量是否是好习惯?我们应该怎样教MATLAB初学者?

Lui*_*ndo 25

有趣的问题!

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

  1. 概念清晰度:如果您需要转置,只需转置.不要投入不必要的共轭.这是不好的做法.你会习惯写作'转置,但不会注意到差异.有一天,你会写'时,.'应使用.作为可能的例子,请看这个问题或者这个问题.

  2. 面向未来.如果将来某一天将您的功能应用于复杂输入,行为将突然改变,您将很难找到原因.相信我,我知道我说的话1.

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

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

  • 谢谢你,是的,我也被教过''',同样的问题发生在我身上,让我很久才找到它.:) (3认同)
  • @rayryeng我忍不住回答.你知道我对此有什么强烈的感受:-) (2认同)
  • @legas - 我记得我第一次遇到这种轻微(但灾难性)的差异.我在不使用任何内置函数的情况下自己实现DFT.要进行矢量化,这需要您计算**复数**系数的矩阵.要做反向,您只需转置矩阵.我花了几个小时才弄清楚它为什么不起作用......那是因为我用''`而不是'.'`...哦哦!像路易斯一样,这是一种像这样的经历,其根深蒂固的"概念"和"."将永远陷入你的脑海. (2认同)

Yvo*_*von 12

我非常偏见:我使用的大多数情况'都是纯粹的"正式",也与数学计算无关.我很可能想要将索引序列的矢量旋转1:1090度.

我罕使用'矩阵,因为它是不明确的,为什么要进行转置你已经回答了第一个问题是- ?

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

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

  • 我在这里大多同意你的意见,除了我发现有时你会正确定义矩阵,在它上面使用内置函数,内置函数会神秘地转换它.我已经开始使用诸如`vectorOut = reshape(vectorOut,size(vectorIn));`之类的语句来编写代码,以强制执行一致的矩阵形状. (3认同)
  • @Yvon - 每当我举办MATLAB研讨会时,这是我一直强调的一点,所以是的,一个例子总是好的.奖励是向他们展示使用''`来计算复杂向量的幅度平方. (2认同)

ray*_*ica 10

这实际上是许多MATLAB程序员争论的主题.有人说,如果你知道自己在做什么,那么你可以继续使用,'如果你知道你的数据是纯粹的,并且.'如果你的数据很复杂就可以使用.然而,有些人(比如Luis Mendo)主张你应该一直使用这一事实,.'这样你就不会感到困惑.

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


我的建议是,.'如果您的目标是转置数据,则应始终使用.如果你想要做一些复杂的运算,然后使用'.'依赖于何种操作/计算你在干什么.显然,Luis Mendo的良好做法已经让我感到震惊.

  • 对于初学者来说,使用Matlab来区分他/她的第一天可能是太详细了.但是,一旦引入了一个真正的问题,应该是教师的责任强调学生的差异(可怜的路易斯:( (3认同)