Changing elements of vector with matrix
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
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
0 comentarios
Respuesta aceptada
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
el 24 de Jun. de 2020
"I was hoping to do the manuvre without a loop"
See my edited answer.
Más respuestas (2)
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
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
0 comentarios
Ver también
Categorías
Más información sobre Loops and Conditional Statements 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!