Change specific values in odd/even columns of a matrix
17 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Miquel
el 25 de Sept. de 2019
Comentada: Star Strider
el 25 de Sept. de 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 comentarios
Respuesta aceptada
Star Strider
el 25 de Sept. de 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 comentarios
Más respuestas (1)
Fabio Freschi
el 25 de Sept. de 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;
Ver también
Categorías
Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!