Sorting Elements of af 3D matrix in another Matrix with a condition

1 view (last 30 days)
x1=0.05;
x2=0.1;
B=zeros(428,29,2);
k=1;
i=1;
for j=1:29; %columns
if x2>E_D(i,j,1)& E_D(i,j,1)>x1;
B(i,k,:)=E_D(i,j,:);
end
x2=x2+0.05;
x1=x1+0.05;
i=1+1;
k=k+1;
if i>428
break
end
end
I have written this code that should search the first sheet of a 3D Matrix, then apply the condition and place the elements of the first and second sheet of the cell in another Matrix of the same size and the column should change with the loop iteration, but it does not seem to work, it gives a Matrix B of Zeros.
  1 Comment
David Goodmanson
David Goodmanson on 7 Sep 2021
Hi Alex,
I tried setting E_D to a random matrix and it does occasionally come up with a nonzero element for B. However, your i>428 statement implies that you expect i to eventually hit that value. But you have
i = 1+1 rather than i = i+1
so i is always 2. Even after making that change, i is never larger than 29. So you may have some work to do with the code.

Sign in to comment.

Answers (1)

Salman Ahmed
Salman Ahmed on 14 Oct 2021
Hi Alex,
From what I observe from your code is that you would like to iterate over and sort elements based on the condition defined using matrix E_D, x1 and x2. Assuming you want to execute the j loop for all possible values of i, consider the following modification to your code. Hope it helps.
x1=0.05;
x2=0.1;
B=zeros(428,29,2);
E_D=rand(428,29,2); % Substitute your E_D matrix
k=1;
i=1;
while(1) % Add this to loop over values of i
for j=1:29 %columns
if x2>E_D(i,j,1)&&E_D(i,j,1)>x1
B(i,k,:)=E_D(i,j,:);
x2=x2+0.05;
x1=x1+0.05;
end
end
i=i+1; % Keep the increments outside j loop
k=k+1;
if i>=428
break
end
end

Community Treasure Hunt

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

Start Hunting!