Как получить диагональную матрицу из вектора A
У меня есть столбец:
0.0677
0.0584
0.0487
0.0453
0.0394
Какая инструкция получит следующий вывод
0.0677 0 0 0 0
0 0.0584 0 0 0
0 0 0.0487 0 0
0 0 0 0.0453 0
0 0 0 0 0.0394
Ответы
Ответ 1
Если я правильно помню, команда вызывала что-то вроде diag(A)
Изменить: здесь вы можете найти документацию по diag
http://www.mathworks.com/help/techdoc/ref/diag.html
обратите особое внимание на цитату:
X = diag (v) ставит v на главную диагональ, такую же, как и выше, с k = 0.
Ответ 2
diag - это нормальное решение MATLAB (как указано posdef.) Таким образом,
D = diag(vec);
дает необходимую матрицу с диагональными элементами.
Возможно, лучше в некоторых приложениях создать разреженную матрицу, так как диагональная матрица довольно разрежена. Поэтому, если вы выполняете умножение матрицы, это значительно поможет уменьшить количество ненужных операций.
n = length(vec);
D = spdiags(vec(:),0,n,n);
Если вы действительно хотели выполнить назначение в явном виде, используйте один линейный индекс, например:
n = length(vec);
D = zeros(n);
D(cumsum([1,repmat(n+1,1,n-1)])) = vec;
Или вы можете использовать функцию sub2ind для преобразования набора индексов в один индекс.
Ответ 3
Ниже приводится диагональная матрица D
, диагональ которой есть вектор vec
. Он написан в векторном виде в MATLAB.
D = zeros(numel(vec));
[I,J] = ind2sub(size(D),1:numel(D));
ind = [I(:) J(:)];
ind = find(ind(:,1)==ind(:,2));
D(ind) = vec;
Ответ 4
Ну, очевидно, вы можете сделать это с помощью C-like. Прямо сейчас я не могу найти более элегантное решение.
vector;%Your vector
vec_length = length(vector);
A = zeros(vec_length);
for i=1:vec_length
A(i,i) = vector(i);
end;