Changing elements of vector with matrix

1 visualización (últimos 30 días)
Michael Clausen
Michael Clausen el 24 de Jun. de 2020
Comentada: Michael Clausen el 24 de Jun. de 2020
I have a question regarding a simple operation that I cant find an answer to. Hope that someone can help me.
I have a vector a:
a = zeros(1,10)
and a matrix b:
b = [1, 3; 6, 8]
I want to change elements of a into ones in accordance with the segments indicated by matrix b:
The result should be
1 1 1 0 0 1 1 1 0 0
When I try:
a(b(:,1):b(:,2)) = 1
I get
1 1 1 0 0 0 0 0 0 0
Best regards,
Michael

Respuesta aceptada

Stephen23
Stephen23 el 24 de Jun. de 2020
Editada: Stephen23 el 24 de Jun. de 2020
No loop required:
>> v = 1:numel(a);
>> x = any(v>=b(:,1) & v<=b(:,2), 1); % requires MATLAB >=R2016b
>> a(x) = 1
a =
1 1 1 0 0 1 1 1 0 0
For earlier versions replace the logical comparisons with bsxfun.
Or just use one simple loop:
>> for k = 1:size(b,1), a(b(k,1):b(k,2)) = 1; end
>> a
a =
1 1 1 0 0 1 1 1 0 0
  3 comentarios
Stephen23
Stephen23 el 24 de Jun. de 2020
"I was hoping to do the manuvre without a loop"
See my edited answer.
Michael Clausen
Michael Clausen el 24 de Jun. de 2020
Thanks :-)

Iniciar sesión para comentar.

Más respuestas (2)

Ashish Azad
Ashish Azad el 24 de Jun. de 2020
Editada: Ashish Azad el 24 de Jun. de 2020
The syntax you are using is very ambiguous and will never work
Try
for i=1:length(b)
a(b(i,1):b(i,2))=1;
end
Let me know if this work
  2 comentarios
Stephen23
Stephen23 el 24 de Jun. de 2020
Editada: Stephen23 el 24 de Jun. de 2020
Do NOT use length for this code:
for i=1:length(b)
Consider what would happen if b only has one row.
The only robust solution is to use size and specify the dimension.
Ashish Azad
Ashish Azad el 24 de Jun. de 2020
Yeah truly said Stephen, size would be robust option

Iniciar sesión para comentar.


Alan Stevens
Alan Stevens el 24 de Jun. de 2020
One way as follows:
a =
0 0 0 0 0 0 0 0 0 0
>> b
b =
1 3
6 8
>> a([b(1,1):b(1,2) b(2,1):b(2,2)]) = 1
a =
1 1 1 0 0 1 1 1 0 0

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by