Still some other things wrong with my code, but I think I figured out my 
way around this issue. Thanks for the heads ups, John and Leah. 
This is what I did:

function spikecounter(Varray)
    Varraycut = splice!(Varray,1:spliceend)
    push!(Varraycut,Varraycut[length(Varraycut)])
    spikecount = 0
    for i in 1:(length(Varraycut)-1)
        if Varraycut[i] < 0 && Varraycut[i+1] >= 0
        spikecount += 1
    end
    end
    return spikecount
end

I added a duplicate entry at the end to pad the array and make the [i-1] or 
[i+1] possible. 

On Wednesday, July 30, 2014 6:32:26 PM UTC-4, John Myles White wrote:
>
> This looks like you’re doing implicit if-clauses, which aren’t currently 
> possible with Julia’s list comprehensions.
>
>  — John
>
> On Jul 30, 2014, at 3:30 PM, [email protected] <javascript:> wrote:
>
> So in Python, I would do something like this:
>
>     count = sum([a<0 and b>=0 for a,b in zip(countlist,countlist[1:])])
>
> I am having a bit of trouble Googling for this, since I do not know the 
> right keywords to use, but is there a means of doing something similar with 
> a list comprehension in Julia?
>
> On Wednesday, July 30, 2014 6:17:18 PM UTC-4, Leah Hanson wrote:
>>
>> Your problem is with the first index (`i == 1`). You can't check if the 
>> previous element is < 0. You could adjust your range (the 
>> `1:length(outputarray)`) to only run through elements for which your 
>> if-condition makes sense.
>>
>> -- Leah
>>
>>
>> On Wed, Jul 30, 2014 at 5:12 PM, <[email protected]> wrote:
>>
>>> I'm a bit stuck on this one. Could I get one more hint about a way I 
>>> could get the same thing done without using the illegal indexing? 
>>>
>>> On Wednesday, July 30, 2014 5:46:58 PM UTC-4, John Myles White wrote:
>>>
>>>> Yeah, it’s the combination of (a) the use of i and i+1 indexing with 
>>>> (b) the use of a loop that goes from i = 1 to i = length(outputarray).
>>>>
>>>>  — John
>>>>
>>>>
>>>>  On Jul 30, 2014, at 2:44 PM, [email protected] wrote:
>>>>
>>>> To correct the bug, is it this?
>>>>
>>>> if outputarray[i] < 0 && outputarray[i+1] >= 0
>>>>             count += 1
>>>>         end
>>>>
>>>> Factoring in that Julia begins indexing from 1. 
>>>>
>>>> On Wednesday, July 30, 2014 4:41:43 PM UTC-4, John Myles White wrote:
>>>>>
>>>>> This pseudocode almost works. Just replace Int64[1:len(outputarray)] 
>>>>> with 1:length(outputarray).
>>>>>
>>>>> There’s also a bug in your core logic, but I’ll leave fixing that as 
>>>>> an exercise to the reader.
>>>>>
>>>>>  — John
>>>>>
>>>>> On Jul 30, 2014, at 1:03 PM, [email protected] wrote:
>>>>>
>>>>> Hi guys,
>>>>>
>>>>> I asked this in a previous thread, but because that diverged off-topic 
>>>>> from my existing question, I decided to create a new thread.
>>>>>
>>>>> Anyhow, say I have an array
>>>>>
>>>>> outputarray = Float64[-1.23423,-3.23423,-2.34234,-2.12342,1.23234,2.
>>>>> 23423,-2.23432,5.2341,0.01111,1.23423]
>>>>>
>>>>> This array lists the output of some function. I want to count the 
>>>>> number of times that the function passes by or equals 0 while emerging 
>>>>> from 
>>>>> a negative f(x). 
>>>>>
>>>>> In pseudocode, I want to do:
>>>>>
>>>>> function counter(outputarray)
>>>>>     count = 0
>>>>>     for i in Int64[1:len(outputarray)]
>>>>>         if outputarray[i] >= 0 && outputarray[i-1] < 0
>>>>>             count += 1
>>>>>         end
>>>>>     end
>>>>>     return count
>>>>> end
>>>>>
>>>>> What would be the most efficient way of doing this in Julia?
>>>>>
>>>>> Thanks,
>>>>> Wally 
>>>>>
>>>>>
>>>>>
>>>>
>>
>

Reply via email to