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

 Akzeptierte Antwort

Stephen23
Stephen23 am 24 Jun. 2020
Bearbeitet: Stephen23 am 24 Jun. 2020

1 Stimme

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 Kommentare

Michael Clausen
Michael Clausen am 24 Jun. 2020
Thank you for the quick reply, Ill try your loop.
I was hoping to do the manuvre without a loop, but I guess it is not possible?
Stephen23
Stephen23 am 24 Jun. 2020
"I was hoping to do the manuvre without a loop"
See my edited answer.
Michael Clausen
Michael Clausen am 24 Jun. 2020
Thanks :-)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Ashish Azad
Ashish Azad am 24 Jun. 2020
Bearbeitet: Ashish Azad am 24 Jun. 2020

1 Stimme

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 Kommentare

Stephen23
Stephen23 am 24 Jun. 2020
Bearbeitet: Stephen23 am 24 Jun. 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 am 24 Jun. 2020
Yeah truly said Stephen, size would be robust option

Melden Sie sich an, um zu kommentieren.

Alan Stevens
Alan Stevens am 24 Jun. 2020

1 Stimme

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

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by