How to select an array without element i

14 views (last 30 days)
I want to select an array of a matrix without element i
so if
a =
1
4
7
11
n = 4
V = zeros(3,n)
i want to be able to select
a(:-i)
pseudo code:
for i = 1:n
V(:,1) = a(:-i) %so everthing from a except from element on i'th place
end
And then I want the output to be
V =
4 1 1 1
7 7 4 4
11 11 11 7
I hope someone can help me! sorry for bad englisch
  1 Comment
Stephen23
Stephen23 on 7 Jun 2017
Question for those who enjoy challenges: is there a solution which does not remove elements from a larger array? That would mean no setdiff, eye, etc, and extra points if it does not use a loop :)

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 7 Jun 2017
Edited: Stephen23 on 7 Jun 2017
>> a = [1;4;7;11];
>> n = numel(a);
>> M = reshape(a(1+mod(setdiff(1:n*n,1:n+1:n*n)-1,n)),n-1,n)
M =
4 1 1 1
7 7 4 4
11 11 11 7

More Answers (3)

Jan
Jan on 7 Jun 2017
Edited: Jan on 7 Jun 2017
While I prefer Stephen's or Andrei's vectorized solutions for the productive use, the actual question can be solved in a loop also:
a = [1; 4; 7; 11];
n = 4;
V = zeros(3, n);
for k = 1:n
V(:, k) = a(setdiff(1:n, k));
end
Or:
index = true(1, 4);
for k = 1:n
index(k) = false;
V(:, k) = a(index);
index(k) = true;
end
Or:
V = repmat(a, 1, n);
V(1:n+1:end) = [];
V = reshape(V, n-1, n);
Or:
[index, dummy] = find(~eye(n));
V = reshape(a(index), [], n)

H ZETT M
H ZETT M on 7 Jun 2017
This is not pretty, but it works:
a =[1;4;7;11]
n = 4
V = zeros(3,n)
for i=1:n
V(:,i)=a([1:i-1 i+1:end])';
end

Andrei Bobrov
Andrei Bobrov on 7 Jun 2017
Edited: Andrei Bobrov on 7 Jun 2017
n = numel(a);
V = reshape(nonzeros(repmat(a,1,n).*~eye(n)),[],n)

Community Treasure Hunt

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

Start Hunting!