How to select an array without element i

15 次查看(过去 30 天)
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 个评论
Stephen23
Stephen23 2017-6-7
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 :)

请先登录,再进行评论。

采纳的回答

Stephen23
Stephen23 2017-6-7
编辑:Stephen23 2017-6-7
>> 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

更多回答(3 个)

Jan
Jan 2017-6-7
编辑:Jan 2017-6-7
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 2017-6-7
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 2017-6-7
编辑:Andrei Bobrov 2017-6-7
n = numel(a);
V = reshape(nonzeros(repmat(a,1,n).*~eye(n)),[],n)

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by