Hello!
I have a problem where I need to remove som rows from a matrix. I need to remove all numbers under 10 and over 60 from the first row and all negative numbers from the second row. The third row has to be between 1:4. I need to print if a row has been removed, so I know which rows are missing, which I haven't implemented in the code below. I have tried in many ways and has come up with this that removes the right rows, but I am sure it can be done in a smarter way…
clc;clear; false_data = [8 20 15 35 65 35; 0.1090 -0.50 0.5170 1.0860 0.9340 0.1090;1 2 3 4 6 1]'; approved_bacteria = [1 2 3 4];
for i = 1:length(false_data(:,1)) indices = 10 > false_data(:,1) | (false_data(:,1) > 60)
false_data(indices,:) = []; end
for i = length(false_data(:,2)) indices = false_data(:,2) < 0; false_data(indices,:) = []; end
for i = length(false_data(:,3)) indices = false_data(i,3) < 1 false_data(i,3) > 4; false_data(indices,:) = []; end false_data

 采纳的回答

This is how I'd do it.
% Bounds
lb = [10 0 1];
ub = [60 inf 4];
% Simulate data
n = 1000;
data = [randi(100,[n,1]) randn(n,1) rand(n,1)*10];
% Apply conditions
idxrmv = any(bsxfun(@lt,data,lb) | bsxfun(@gt,data,ub),2);
% Remove
data(idxrmv,:) = [];
% print
fprintf('Removed row %3.0i\n',find(idxrmv));

5 个评论

This is really great, thanks! Can it be done so that i can print the column number also. Something like Removed column 1 row 5?
Like which column(s) caused the row to fail?
The information is here:
You could loop over this and check which columns are true
bsxfun(@lt,data,lb) | bsxfun(@gt,data,ub)
I have to explain in which line the error occurred and what error was. I will try a loop
loop over the rows of the matrix, find the columns in each row, print.
When I run the function I get this errormessage:
Enter the filename to load: data0.txt
data =
25.0000 0.1090 1.0000
20.0000 0.0960 2.0000
100.0000 0 3.0000
15.0000 0.8000 5.0000
35.0000 1.0860 4.0000
40.0000 0.9340 2.0000
35.0000 0.1090 1.0000
22.0000 0.1000 1.0000
21.0000 0.1000 2.0000
16.0000 0.6000 3.0000
17.0000 0.8500 5.0000
32.0000 1.0800 4.0000
45.0000 0.9500 2.0000
37.0000 0.1100 1.0000
Error using bsxfun Non-singleton dimensions of the two input arrays must match each other.
Error in checkdata (line 10) idxrmv = any(bsxfun(@lt,data,lb) | bsxfun(@gt,data,ub),2);

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Loops and Conditional Statements 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by