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 件のコメント

madhan ravi
madhan ravi 2019 年 4 月 7 日
explicitly state your desired output
Abhijit Chowdhary
Abhijit Chowdhary 2019 年 4 月 7 日
編集済み: Abhijit Chowdhary 2019 年 4 月 7 日
If , then I want . If , then I want . Otherwise I want , and I'm hoping for a one-line to cover these scenarios.

サインインしてコメントする。

 採用された回答

David Goodmanson
David Goodmanson 2019 年 4 月 7 日

1 投票

Hi Abhijit,
try
x = 1:n;
x(mod([k-1 k+1]-1,n)+1) = []

3 件のコメント

Abhijit Chowdhary
Abhijit Chowdhary 2019 年 4 月 8 日
Hello David,
This indeed works for the case, however, it seems that it doesn't for other k. Thank you, though!
David Goodmanson
David Goodmanson 2019 年 4 月 8 日
編集済み: David Goodmanson 2019 年 4 月 8 日
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).
Abhijit Chowdhary
Abhijit Chowdhary 2019 年 4 月 8 日
Ah, no it's my fault, you're right. I did not realize that x was being changed when you do this, and blindly continued to test on it. Yes, this indeed works, thanks!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchange で Resizing and Reshaping Matrices についてさらに検索

製品

リリース

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by