我想把一个二维矩阵简化为行向量。
但是对大矩阵使用reshape
确实很慢,另一种选择是使用colon
,但是我希望矩阵的转置是冒号而不是矩阵本身。
例如:
A=magic(3)
A =
8 1 6
3 5 7
4 9 2
A(:)
将一个接一个地堆叠所有的列。但是我正在寻找这样的东西:
AA=A(2:3,:)';
然后重新整形或冒号AA代替A。
问题是我不想定义像AA
这样的附加变量。
没有reshape
的二维矩阵有什么降维方法吗?
2条答案
按热度按时间cwxwcias1#
您可以通过线性索引来避免额外的变量。例如:
它给出了
这里的情况是,您将
A
视为已转换为向量,并且通过索引1到9访问此一维数组的元素。使用冒号是线性索引的一种特殊情况,A(:)
与A(1 : end)
相同。计算出正确的线性索引可能很棘手,但
sub2ind
可以帮助解决这个问题。这可能会稍微加快代码的速度,主要是因为(如@Shai所写)您避免了将数据写入中间变量。
ar7v8xwq2#
试着看看subsref。对于您的示例,您可以按如下方式使用它:
更新:我误解了原来的问题;我认为OP想要从转置矩阵A中选择2:3的行,保持列不变。我将保留前面的答案,以防它对其他人有用。
我认为他/她可以使用以下代码来切片和展平矩阵:
这将作为输出给予:
[3 5 7 4 9 2]