Сглаживание матрицы в MATLAB с индексами - PullRequest
3 голосов
/ 01 февраля 2012

у меня есть матрица X e.g = [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 ]

Я пытался использовать двойной цикл for, но даже если он работал, это звучит как плохая идея.

Так может ли кто-нибудь иметь лучшую идею для выполнения вышеупомянутой задачи?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Вот самая глупая вещь, о которой я мог подумать (при условии, что 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 голос
/ 02 февраля 2012

Ничего плохого в ответе @ Андрея, но потому что мне нравится искать причины для использования 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)]
...