在MATLAB中使用索引压平矩阵

3
我有一个矩阵 X,例如 = [a b; c d; e f]。
我需要创建另一个矩阵,列出矩阵的索引位置和值。
例如。输出是 E = [ 1 1 a ; 1 2 b ; 2 1 c ; 2 2 d ; 3 1 e ; 3 2 f ]。
我一直在尝试使用双重循环,但即使它能工作,那也听起来不是个好主意。
那么,有没有更好的方法来执行上述任务呢?

a、b、c、d、e和f都是标量吗?还是它们可以是矩阵? - Pursuit
2个回答

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)]

然而,我有一种感觉,可能会有更加优美的答案。

这很不错。你可以通过用x'替换transpose(x)来提高可读性,并将最后一行重写为[j(:) i(:) reshape(x',[], 1)] - Pursuit
@Pursuit,感谢你的建议。我更喜欢使用transpose而不是tag,因为当人们阅读时很容易注意到它。你说的另一件事情是100%正确的 - 我会进行更新。 - Andrey Rubshtein

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)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接