필터 지우기
필터 지우기

modify only the diagonal entries in a matrix?

조회 수: 46 (최근 30일)
shawin
shawin 2018년 7월 9일
댓글: Image Analyst 2021년 6월 21일
How can I Multiply the diagonal of a matrix by a number, for example; by 2?

채택된 답변

Jan
Jan 2018년 7월 9일
편집: Jan 2018년 7월 9일
A = rand(4,3);
s = size(A);
index = 1:s(1)+1:s(1)*s(2); % Indices of the main diagonal
A(index) = A(index) * 2
This touches the elements on the diagonal only.
  댓글 수: 6
Alvin Chen
Alvin Chen 2021년 6월 21일
@Image Analyst For loop would work for sure, but would it be more performable without using loop? Just extract the logicals by the positions of the indices in A.
Image Analyst
Image Analyst 2021년 6월 21일
I don't know what you mean by "performable". Sure there are other ways to perform this operation that may work, however I did not understand your explanation of extracting the logicals so I invite you to show your non-for loop way that doubles the values in the 4 diagonals in a non-square matrix, for example a 5 by 10 matrix.
m = ones(5, 10)
Please show us.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Image Analyst
Image Analyst 2019년 2월 26일
Here's a way you can do it using eye() to create indexes of the diagonal. I show two ways,
  1. one to create another output matrix and leave the input matrix alone, and
  2. another to change the input matrix in place.
% Create a logical mask for the diagonal elements.
d = logical(eye(size(m)))
% First way: Create an output matrix m2, retaining the original m.
m2 = m % Initialize with a copy of m
% Multiply diagonal elements of m2 (in place) by 2.
m2(d) = m(d) * 2 % Input values are replaced.
% Second way: Change/replace the values in original matrix.
% Multiply diagonal elements (in place) by 2.
m(d) = m(d) * 2 % Input values are replaced.
The two ways are the same except if you want a second matrix for the output you have to copy the input matrix first.
  댓글 수: 2
Athikah Raihah
Athikah Raihah 2019년 2월 26일
Thanks a lot! That is very clear, exactly what I need!
Jan
Jan 2019년 2월 26일
At least in current Matlab versions:
d = eye(size(m), 'logical'); % faster than: logical(...)

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Operating on Diagonal Matrices에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by