# Problem with logical indexing

7 visualizzazioni (ultimi 30 giorni)
RP il 24 Apr 2019
Commentato: Ajith Thomas il 19 Lug 2019
I'm trying to write a function that will take a row vector of temperatures as input and will give the number of temperatures below 32° as output. I have tried this:
function numfreeze = freeezing(temperatures)
numfreeze = numel(freezing(freezing<32))
end
...but I get the error message "Out of memory. The likely cause is an infinite recursion within the program."
Can someone help me and tell me what this means? When I just use
numfreeze = numel(freezing(freezing<32))
in the command window after setting a vector for "temperatures", it works fine.
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Risposta accettata

Guillaume il 24 Apr 2019
Modificato: Guillaume il 24 Apr 2019
freezing is the name of the function. So when you write freezing inside the function, you're telling it to call itself. Of course, once it's called itself, it reexecute that freezing call ad finitum. Hence the infinite recursion.
You probably meant to use the input variable temperatures inside that function
function numfreeze = freeezing(temperatures)
numfreeze = numel(temperatures(temperatures<32))
end
While the above will work, it's not the most efficient. You're deleting all the elements above 32 to then find out how many remain. It be simpler to just count how many true values are in your logical array and not bother with the deletion, so:
function numfreeze = freeezing(temperatures)
numfreeze = nnz(temperatures<32); %you can also use sum instead of nnz
end
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
RP il 24 Apr 2019
Thank you so much, this works and I didn't know nnz before!

Accedi per commentare.

### Più risposte (2)

Alex Mcaulley il 24 Apr 2019
I think you have a typo, calling infinite times the function freezing, then:
function numfreeze = freeezing(temperatures)
numfreeze = numel(temperatures(temperatures<32))
end
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

Ajith Thomas il 19 Lug 2019
function numfreeze=freezing(w)
lowerthan_32=w(w<32);
no_logical_values=lowerthan_32(lowerthan_32>=0);
numfreeze=length(no_logical_values);
end
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Ajith Thomas il 19 Lug 2019
function numfreeze=freezing(w)
lowerthan_32=w(w<32);
numfreeze=numel(lowerthan_32);
end

Accedi per commentare.

### Categorie

Scopri di più su Operating on Diagonal Matrices 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