Circularly exclude elements.
13 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Abhijit Chowdhary
le 7 Avr 2019
Commenté : Abhijit Chowdhary
le 8 Avr 2019
Hello all,
I'm trying to compactly write a line of code for a interesting program I'm working on. Fixing
, suppose we have the following code:
x = 1:n;
non_adj = zeros(n,n-2);
for k=1:n
non_adj(k,:) = []; %in here comes the confusion
end
In non_adj(k,:) I would like to fill in x without the elements k-1 and k+1. However, these elements are regarded circularily, i.e. if I have
, then I want
(order of elements irrelevant). I know I can do this with if statements handling the
cases, but I was wondering if you all had a nicer way to one liner the construction.
I attempted the following construction
non_adj(k,:) = [k, k+2:mod(k-3,n)+1, mod(k+1,n)+1:k-2];
However this fails, for example, where
. The above would construct the array
, where in fact I wanted
.
Do you have any ideas? If it helps, the context is that I'm trying to construct a vertex set minus the neighbors of vertex k, which happen to be
(circularily shifted for
).
EDIT: I've realized I could use set differencing, i.e.: (however, you still might come up with better ideas).
non_adj(k,:) = setdiff([1:n], 1 + [mod(k-2,n) mod(k,n)]);
2 commentaires
Réponse acceptée
David Goodmanson
le 7 Avr 2019
Hi Abhijit,
try
x = 1:n;
x(mod([k-1 k+1]-1,n)+1) = []
3 commentaires
David Goodmanson
le 8 Avr 2019
Modifié(e) : David Goodmanson
le 8 Avr 2019
Hi Abhijit,
I thought that for a given k, you wanted to keep k, exclude k-1 and k+1 and keep the rest of them, doing so in a circular fashion. Could you give me a quick example of where the code above doesn't work? I am having trouble finding one (n.b. both lines of code have to be run for each new value of k).
Plus de réponses (0)
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!