Changing elements of vector with matrix
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Michael Clausen
le 24 Juin 2020
Commenté : Michael Clausen
le 24 Juin 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 commentaires
Réponse acceptée
Stephen23
le 24 Juin 2020
Modifié(e) : Stephen23
le 24 Juin 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 commentaires
Plus de réponses (2)
Ashish Azad
le 24 Juin 2020
Modifié(e) : Ashish Azad
le 24 Juin 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
Alan Stevens
le 24 Juin 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 commentaires
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!