Arrays 在MATLAB中使用转置与转置

Arrays 在MATLAB中使用转置与转置,arrays,matlab,matrix,Arrays,Matlab,Matrix,在MATLAB中转置向量/矩阵时,很长一段时间以来,我只看到并使用了”(撇号)操作符 例如: >> v = [ 1 2 3 ]' v = 1 2 3 然而这是我最近发现的共轭转置,或者ctranspose 这似乎只在涉及复数时才起作用,如果您想转置矩阵而不获得共轭,则需要使用“运算符 那么,对实矩阵和向量也使用“是一种好的做法吗?我们应该教哪些MATLAB初学者?有趣的问题 我肯定地说,当你只想转置时,使用“是一种很好的做法,即使数字是真的,因此”也会

在MATLAB中转置向量/矩阵时,很长一段时间以来,我只看到并使用了
(撇号)操作符

例如:

>> v = [ 1 2 3 ]'

v = 

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

这似乎只在涉及复数时才起作用,如果您想转置矩阵而不获得共轭,则需要使用
运算符

那么,对实矩阵和向量也使用
是一种好的做法吗?我们应该教哪些MATLAB初学者?

有趣的问题

我肯定地说,当你只想转置时,使用
是一种很好的做法,即使数字是真的,因此
也会有同样的效果。主要原因如下:

  • 概念清晰性:如果需要转置,只需转置即可。不要加入不必要的共轭。这是个坏习惯。您将习惯于编写
    来进行转置,并且不会注意到其中的差异。总有一天你会在应该使用
    的时候写
    。有关这方面的可能说明,请参见或

  • 未来证明。如果将来有一天你将你的功能应用于复杂的输入,行为会突然改变,你将很难找到原因。相信我,我知道我在说什么

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


    1在我使用Matlab的早期,我花了相当长的时间来追溯代码中的某个问题,结果发现这是由于在我应该使用
    时使用
    引起的。真正让我不高兴的是,是我的教授说,
    的意思是转置!他忘了提到共轭,因此我犯了错误。我学到的教训:
    不是
    ;教授们可以告诉你一些完全错误的事情:-)

    这实际上是许多MATLAB程序员争论的话题。有人说,如果你知道你在做什么,那么如果你知道你的数据是真实的,你可以继续使用
    ,如果你的数据是复杂的,你可以使用
    。然而,有些人(例如)主张,你应该始终使用
    ,这样你就不会感到困惑

    这允许正确处理输入函数的数据,以防输入到这些函数的数据变得复杂。有时需要复数转置,例如计算复数向量的幅值平方。事实上,在她的一篇MATLAB摘要(我不记得是哪一篇…)中,她说这是引入复杂转置的原因之一



    我的建议是,如果您的目标是转置数据,那么您应该始终使用
    。如果你想做一些复杂的算术,那么根据你正在做的运算/计算,使用
    。显然,路易斯·门多的良好实践对我产生了影响。

    我非常有偏见的观点:我使用的大多数案例都是纯粹的“形式”,即与数学计算无关。很可能我想要像索引序列
    1:10
    那样旋转一个向量90度

    我很少对矩阵使用
    ,因为它是不明确的——您要回答的第一个问题是为什么要进行转置

    如果矩阵最初是以错误的方向定义的,我宁愿以正确的方向定义矩阵,但以后不要再旋转它


    为了转置矩阵进行数学计算,我显式地使用
    transpose
    ctranspose
    。因为这样做代码更容易阅读(不必关注那些小点)和调试(不必关心丢失的点)。像往常一样做以下工作,如点积

    这里需要区分两种情况:

  • 出于非数学原因进行转置,比如你有一个函数,它将数据作为数组而不是数学向量处理,你需要你的纠错输入来获得你期望的格式
  • 把转置当作数学运算
  • 在后一种情况下,情况必须决定哪一种是正确的,在这种情况下,可能只有两种选择中的一种是正确的。最常见的是采用共轭转置,它对应于
    ,但在某些情况下,您必须采用直接转置,然后,当然,您需要使用


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

    哈哈哈!我在我的帖子里提到过你。。。看看谁决定写一个:)+1来自me@rayryeng我忍不住回答。你知道我对此有多么强烈的感情:-)谢谢你,是的,我也被教过
    ,同样的问题也发生在我身上,我花了很长时间才找到它。:)@legas——我记得我第一次遇到这种轻微的(但灾难性的)差异。我自己实现DFT,没有使用任何内置函数。要进行矢量化,需要计算复系数矩阵。要进行逆运算,只需将矩阵转置即可。我花了几个小时才弄明白