下面是整理的代碼。
clc;
clear all;
A = rand(10,10,4);
column = 2;
z=A(:,column,:);
[values,indices] = sort(z,1) ;
B=zeros(size(A,1),size(A,2),size(A,3));
for i=1:size(A,3)
B(:,:,i) =A(indices(:,:,i),:,i);
end
在這裏A
所有值和B
是0
和1
之間。所以在檢查小於1和大於17時沒有意義。另一件事是,當你刪除一行時,你將如何處理第三維?如果您分別對每個第三維進行刪除B(:,:,1), B(:,:,2), B(:,:,3), B(:,:,4)
。每個維度B(:,:,1), B(:,:,2), B(:,:,3), B(:,:,4)
將具有不同的行數。 B
不能有這樣的行數。
更新:代碼排序和刪除行當所有值在該行的第二列是在該行的第二列小於0.05或所有值大於0.15
clc;
clear all;
A = rand(10,10,4);
%% sorting
column = 2; % sort base on column
z=A(:,column,:);
[values,indices] = sort(z,1) ;
B=zeros(size(A,1),size(A,2),size(A,3));
for i=1:size(A,3)
B(:,:,i) =A(indices(:,:,i),:,i);
end
%% deleting row
C=B;
column=2; % delete base on column
rowSize=size(C,1);
i=1;
while true
count=0;
count1=0;
for j=1:size(C,3)
if(C(i,column,j)< 0.05)
count=count+1;
end
if(C(i,column,j)> 0.15)
count1=count1+1;
end
end
if (count==size(C,3) || count1==size(C,3))
C(i,:,:)=[];
rowSize=rowSize-1;
else
i=i+1;
end
if (i>rowSize)
break;
end
end
更新:代碼與排序和刪除行時任何值該行的第二列小於0.05或任何值在第二列該行大於0.15
%% deleting row
C=B;
column=2; % delete base on column
rowSize=size(C,1);
i=1;
while true
flag=0;
for j=1:size(C,3)
if(C(i,column,j)< 0.05 || C(i,column,j)> 0.15)
flag=1;
break;
end
end
if (flag==1)
C(i,:,:)=[];
rowSize=rowSize-1;
else
i=i+1;
end
if (i>rowSize)
break;
end
end
@ Rijul.Thank you so。其實,在我的真實數據中,我想檢查0.05到0.15。 (1和17只是一個例子),並刪除那些標準不太多的行。另外,在我的情況下刪除額外的行後,我將在所有切片中具有相同數量的行。我之前檢查過。 – user6052232
好的,因爲你已經寫了行刪除代碼。排序是否按預期工作? –
@ Rijul。非常感謝。它工作正常。但我不知道如何刪除多少條額外的行(列4中的任何數據小於0.05或大於0.15)必須刪除該行。 – user6052232