用索引在MATLAB中展平矩阵

时间:2012-02-01 18:47:33

标签: matlab matrix vectorization

我有一个矩阵X e.g = [a b; c d; e f]

我需要创建另一个矩阵,列出矩阵的索引位置和值。

e.g。输出为E = [ 1 1 a ; 1 2 b ; 2 1 c ; 2 2 d ; 3 1 e ; 3 2 f ]

我一直在尝试使用双循环,但即使它确实有效,这听起来也不错。

那么任何人都可以更好地执行上述任务吗?

2 个答案:

答案 0 :(得分:2)

这是我能想到的最蠢的事情(假设a,b,c,d,e,f都是标量)

x = [1 2;3 4;5 6];
[i,j]=ind2sub(size(transpose(x)), 1:numel(x));
[j(:) i(:) reshape(transpose(x),[],1)]

然而,我觉得可能有一个更优雅的答案。

答案 1 :(得分:1)

@ Andrey的答案没有错,但因为我想找到使用kron的理由:)

A = [1 2; 3 4; 5 6];

[nrows, ncols] = size(A);

M = [kron([1 : nrows]', ones(ncols, 1))...
    kron(ones(nrows, 1), [1 : ncols]')...
    reshape(A', [], 1)]