Change specific values in odd/even columns of a matrix
21 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Miquel
am 25 Sep. 2019
Kommentiert: Star Strider
am 25 Sep. 2019
I have a matrix and I would like to make all values which are equal x, equal to y. But I would like to do that only in odd columns. Can I do it without using a loop?
Say I have the following matrix:
>> A=randi([1,5],4,4)
A =
5 4 5 5
5 1 5 3
1 2 1 5
5 3 5 1
And I would like to turn all 1's which are in the odd columns into 0's to get the following matrix:
5 4 5 5
5 1 5 3
0 2 0 5
5 3 5 1
I tried to do the job with this code:
A(A(:,1:2:end)==1)=0
A =
5 4 5 5
5 1 5 3
0 0 1 5
5 3 5 1
It gets the position of the 1's in the odd columns right, but it changes the values in consecutive columns instead.
I guess an equivalent question would be how to generate a logical matrix of the same dimensions of A with all values equal to 0 except these which are equal to 1 AND in odd columns.
Any ideas?
Thanks
0 Kommentare
Akzeptierte Antwort
Star Strider
am 25 Sep. 2019
Try this:
A = [5 4 5 5
5 1 5 3
1 2 1 5
5 3 5 1];
L = A == 1;
L(:,2:2:end) = false;
A(L) = 0
producing:
A =
5 4 5 5
5 1 5 3
0 2 0 5
5 3 5 1
2 Kommentare
Weitere Antworten (1)
Fabio Freschi
am 25 Sep. 2019
% find all values
[iRow,jCol] = find(A == 1);
% find odd rows
iOdd = rem(jCol,2) ~= 0
% fix values
A(sub2ind(size(A),iRow(iOdd),jCol(iOdd))) = 0;
Siehe auch
Kategorien
Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!