Arrays 在MATLAB中使用转置与转置
在MATLAB中转置向量/矩阵时,很长一段时间以来,我只看到并使用了Arrays 在MATLAB中使用转置与转置,arrays,matlab,matrix,Arrays,Matlab,Matrix,在MATLAB中转置向量/矩阵时,很长一段时间以来,我只看到并使用了”(撇号)操作符 例如: >> v = [ 1 2 3 ]' v = 1 2 3 然而这是我最近发现的共轭转置,或者ctranspose 这似乎只在涉及复数时才起作用,如果您想转置矩阵而不获得共轭,则需要使用“运算符 那么,对实矩阵和向量也使用“是一种好的做法吗?我们应该教哪些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,没有使用任何内置函数。要进行矢量化,需要计算复系数矩阵。要进行逆运算,只需将矩阵转置即可。我花了几个小时才弄明白