How to select an array without element i

조회 수: 25 (최근 30일)
Romy Schipper
Romy Schipper 2017년 6월 7일
댓글: Stephen23 2017년 6월 7일
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에서 Multidimensional Arrays에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by