# A for loop that counts the negatives of a 1D array

2 visualizzazioni (ultimi 30 giorni)
Eric Brown il 19 Apr 2022
Risposto: Vatsal il 17 Nov 2023
My function is to recieve a 1D array of numbers as the input and uses a for loop to find the location of all negatives in the array and return it as the output. If given [-2 3 0 -5 4] the output would be [1 4]. I'm not sure what to do in order for it to count, does y have to be a array before the for loop? If so, how do I add my indexing variable to y inside the for loop?
function y = WhereNeg(x)
[xrow, xcol] = size(x);
for ii = 1:xcol
if x(ii) < 0
y = ii;
end
end
##### 3 CommentiMostra 1 commento meno recenteNascondi 1 commento meno recente
Eric Brown il 19 Apr 2022
Exactly so does that mean y has to be an array before the for loop adn if so how do I keep ii in y without updating ii during each loop?
Riccardo Scorretti il 19 Apr 2022
Dear Eric, this look like an assigment (= you have to do, not us) so I'll give you some hints, but not the solution.
• your function accepts as input argument a vector, and it is expected to return a vector: in your code, it returns a scalar (because of the line y = ii). A possible, but very inefficient way to fix it, would be to define y as an empty vector before entering the loop, and then to put new values (= ii) at the end of y. Remember that you can access to the last element of a vector by using the syntax y(end), so y(end+1) would be the next unoccupied position. I would like to stress that this is a very inefficient way to do.
• In Matlab, normally this kind of job can be done in a single line by using the function find (read the doc). Your program is written in a kind of C style.
• I strongly suggest you to use numel to get the number of elements of a vector, not size. The point is that your code assumes that x is a row-vector, which is an unnecessary hypothesis.
• It is a good practice (at least, I consider that it is) to close all functions by end, so I advice you to add an ending keyword end to close your function.

Accedi per commentare.

### Risposte (1)

Vatsal il 17 Nov 2023
Hi,
In your current function, the variable 'y' is being overwritten each time a negative number is found. To store all the indices of negative numbers, you should initialize 'y' as an empty array before the loop and then append to it each time a negative number is found.
Here's how you can modify your function:
function y = WhereNeg(x)
y = []; % Initialize y as an empty array
[xrow, xcol] = size(x);
for ii = 1:xcol
if x(ii) < 0
y = [y ii]; % Append the index to y
end
end
end
In this modified function, 'y' is an array that gets populated with the indices of negative numbers in 'x'. The line y = [y ii] appends the current index 'ii' to the array 'y' when a negative number is found. To count the number of negative numbers, you can simply use the above code and return the length of 'y'.
I hope this helps!
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Categorie

Scopri di più su Programming in Help Center e File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by