How to select an array without element i

25 Ansichten (letzte 30 Tage)
Romy Schipper
Romy Schipper am 7 Jun. 2017
Kommentiert: Stephen23 am 7 Jun. 2017
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 Kommentar
Stephen23
Stephen23 am 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 :)

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
Stephen23 am 7 Jun. 2017
Bearbeitet: Stephen23 am 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

Weitere Antworten (3)

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

Kategorien

Mehr zu Multidimensional Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by