在 MATLAB 中,为啥我不能组合转置和冒号运算符? [复制]

Posted

技术标签:

【中文标题】在 MATLAB 中,为啥我不能组合转置和冒号运算符? [复制]【英文标题】:In MATLAB, why can't I compose transpose and colon operators? [duplicate]在 MATLAB 中,为什么我不能组合转置和冒号运算符? [复制] 【发布时间】:2013-04-26 23:55:57 【问题描述】:

在 MATLAB 中,我可以使用 (:) 运算符轻松地按列主要顺序获取矩阵元素的向量,如下所示...

EDU>> A

A =

     1     2
     3     4
     5     6

EDU>> A(:)

ans =

     1
     3
     5
     2
     4
     6

但是,我想按行主要顺序获取元素的向量。所以我想我会在使用 (:) 之前转置矩阵。但是我得到了这个错误......

EDU>> A'(:)
 A'(:)
  |
Error: Unbalanced or unexpected parenthesis or bracket.

为什么 ' 和 (:) 不能在这里组合?我可以分两步完成,但我希望更简洁并避免额外的变量。

EDU>> B = A'

B =

     1     3     5
     2     4     6

EDU>> B(:)

ans =

     1
     2
     3
     4
     5
     6

为什么我不能在 1 步中通过组合 ' 和 (:) 来做到这一点?这样做的正确方法是什么?

谢谢, ~查克

【问题讨论】:

这基本上是this question的复制品。此外,this related question 进一步说明了索引运算符 () 无法遵循某些操作,除非您将其转换为函数调用。 谢谢,我的主要问题实际上是关于索引运算符的第二点。有趣的是,Octave 似乎没有遇到这个问题。 【参考方案1】:

也许使用重塑

reshape(A',prod(size(A)),1)

【讨论】:

这有什么问题? 我觉得没问题。对不起,有人投了你的票。 我将删除我的帖子,这与您的帖子相同,但更早。周围有人不高兴。如果答案不是他们想要的,他们为什么要轻易地给人们投反对票。 +1 表示reshape,但最好选择较短的reshape(A', [], 1) 并让reshape 计算A 中的元素数。如果您坚持自己做,请考虑使用numel(A) 而不是prod(size(A))

以上是关于在 MATLAB 中,为啥我不能组合转置和冒号运算符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

三元组顺序表表示的稀疏矩阵的转置和加法运算的实现

三元组顺序表表示的稀疏矩阵的转置和加法运算的实现----《数据结构》

Spark:如何使用嵌套数组转置和分解列

在熊猫中分组,转置和附加?

循环转置和连接数据帧列表

转置和计算皮尔逊相关性