替代matlab中的重塑或冒号

时间:2014-12-25 10:28:08

标签: matlab matrix reshape colon

我想将二维矩阵缩减为行向量。

但是使用大型矩阵的reshape非常慢。另一个选择是使用colon,但我希望矩阵的转置是冒号而不是矩阵本身。

e.g。

A=magic(3)

A =

     8     1     6
     3     5     7
     4     9     2

A(:)将逐个堆叠所有列。但我正在寻找这样的事情:

AA=A(2:3,:)';

然后重塑或冒号AA而不是A.

问题是我不想定义像AA这样的其他变量。

无论如何,在没有reshape的情况下减少二维矩阵的维数?

2 个答案:

答案 0 :(得分:1)

您可以通过线性索引来避免使用其他变量。以你的例子:

A([2 5 8 3 6 9])

给出了

3  5  7  4  9  2

这里发生的是你将A视为已经转换为向量,并且通过索引1到9访问这个一维数组的元素。使用冒号是一个特例线性索引A(:)A(1 : end)相同。

找出正确的线性指数可能很棘手,但sub2ind可以帮助解决这个问题。

这可能会略微加速代码,主要是因为(作为@Shai wrote)避免将数据写入中间变量。不过,我不会期待太多。

答案 1 :(得分:0)

尝试查看subsref。对于您的示例,您可以按如下方式使用它:

subsref(A',struct('type','()','subs',{{2:3,':'}}))

更新:我误解了原来的问题;我认为OP想要从转置的A矩阵中选择2:3的行,保持列不变。如果它对其他人有用,我会保留以前的答案。

我认为他/她可以使用以下内容来切割和压平矩阵:

subsref(A(2:3,:)', struct('type','()','subs',{{':'}}))

这将作为输出:

[3 5 7 4 9 2]'