2016-05-14 43 views
0

3D矩陣(10*10*4),我想簡短每片取決於之後的2列,並根據2專欄中,我想刪除就2列不到有一個值的所有行1和大於17排序3D矩陣依賴於特定的列

我用這個代碼進行排序,但它不工作

clc; 
clear; 
A = rand(10,10,4) 
column = 2; 
[values,indices] = sort(A(:,column,:)) 
B = A(indices,:,:) 

感謝

回答

1

下面是整理的代碼。

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所有值和B01之間。所以在檢查小於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 
+0

@ Rijul.Thank you so。其實,在我的真實數據中,我想檢查0.05到0.15。 (1和17只是一個例子),並刪除那些標準不太多的行。另外,在我的情況下刪除額外的行後,我將在所有切片中具有相同數量的行。我之前檢查過。 – user6052232

+0

好的,因爲你已經寫了行刪除代碼。排序是否按預期工作? –

+0

@ Rijul。非常感謝。它工作正常。但我不知道如何刪除多少條額外的行(列4中的任何數據小於0.05或大於0.15)必須刪除該行。 – user6052232