Find elemet which are satisfy given condition

6 Ansichten (letzte 30 Tage)
Mariia
Mariia am 14 Mär. 2023
Bearbeitet: Dyuman Joshi am 14 Mär. 2023
hello to everyone! I have a task, where i need to find in column (x) with 100 numbers, such values which are less or equal than 400. And write all these values in new created matrix x1. When I run this code - new matrix from zeros is created, but it doesn't contain any numbers. What could be the reason? Will appreciate your help!
x1=zeros(100,1);
for i=1:100
if x(i)<=400
x1(i)=x(i);
end
end
  1 Kommentar
Dyuman Joshi
Dyuman Joshi am 14 Mär. 2023
Bearbeitet: Dyuman Joshi am 14 Mär. 2023
Your code looks good. What is the value of variable x?
You can assign the values via indexing, which is more efficient than loop
x = randi(750,10,1)
x = 10×1
386 629 86 13 279 497 411 409 239 458
x1 = zeros(size(x));
idx = x<=400;
x1(idx) = x(idx)
x1 = 10×1
386 0 86 13 279 0 0 0 239 0

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Jan
Jan am 14 Mär. 2023
Your code is working:
x = [1, 401, 400, 500, 10, 300];
x1 = zeros(numel(x), 1);
for i = 1:numel(x)
if x(i) <= 400
x1(i) = x(i);
end
end
x1.'
ans = 1×6
1 0 400 0 10 300
You can omit the zeros also:
x = [1, 401, 400, 500, 10, 300];
x1 = zeros(numel(x), 1);
k = 0; % Another counter
for i = 1:numel(x)
if x(i) <= 400
k = k + 1;
x1(k) = x(i);
end
end
x1 = x1(1:k); % Crop unused elements
A more Matlab'ish way is to omit the loop:
x1 = x(x <= 400) % Logical indexing

Weitere Antworten (0)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Produkte


Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by