how to filter columns
15 views (last 30 days)
Show older comments
Hello friends,
I have this script. But is very slow!
I want to filter all columns beginning with column first. After that, I want, in the place of column first, to put the second column and, in the place of column second to put the column first and filter again. And go on!
My purpose is decrease the time!
Thanks by support!
clear all
clc
q = 1;
p = 2;
r1 = 1;
r2 = 1;
tic
% Example: Filtering a matrix
load ('tum.mat'); % tum have 576 x 1000
for i1 = 1:1000
% Filter rows where the first column is greater than 15
z1 = k2(k2(:,1) == 0, :);
s1 = sum(z1, 1);
r(r1,r2) = max(s1);
temp_row = k2(:,q);
k2(:,q) = k2(:,p);
k2(:,p) = temp_row;
p = p + 1;
r1 = r1 + 1;
end
toc
Elapsed time is 337.582496 seconds.
6 Comments
Image Analyst
on 13 Sep 2025
If k2 is a matrix of random numbers, you will never have the numbers be zero so this won't work
k2(:,1) == 0 % Will never happen!
Matt J
on 14 Sep 2025
Elapsed time is 337.582496 seconds.
It does seem impossible for such a small loop to be that slow. Certainly everything excluding the load() statement is very fast, as illustrated in my timing comparison below.
The only explanation I can think of is that you have additional variables in tum.mat that are getting loaded, and which are a lot larger than k2. Or, you are loading from a super slow hard drive.
Answers (1)
Matt J
on 13 Sep 2025
Edited: Matt J
on 13 Sep 2025
m=576;
n=1000;
k2=randi([0,1],m,n).*rand(m,n);
tic;
r=max( (k2==0)'*k2 ,[],2);
toc;
5 Comments
Stephen23
on 17 Sep 2025
@AIRTO: using numbered variables like that is a mistake. Much better to use one container array and indexing:
S = dir('./w*.mat');
for k = 1:numel(S)
F = fullfile(S(k).folder,S(k).name);
C = struct2cell(load(F));
M = C{1}; % this is your matrix.
... do whatever you want with your matrix
S(k).r1 = r1; % save whatever values you want
end
See Also
Categories
Find more on Multidimensional Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!