我有3D
矩阵(10*10*4)
,我试图在此之后根据2
列缩短每个切片,并根据列2
我要删除所有行列2
上的值小于1
且大于17
。
我使用此代码进行排序,但它无法正常工作
clc;
clear;
A = rand(10,10,4)
column = 2;
[values,indices] = sort(A(:,column,:))
B = A(indices,:,:)
由于
答案 0 :(得分: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
和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