I am sorry guys, but the solution I've proposed, and the one that was proposed by the scipy camp would cause confusion for those who switch from Matlab, and I just checked that.
If you are going to use the same name as the Matlab one, than this function should return the m such that 2**m >= abs(n), and should not return 2^m.
Whatever approach you guys want to use (and I believe that especially given what the function should return), do not return 2**m, but just m instead.
For example:
>>> def nextpow2(n):
... return np.ceil(np.log2(n))
...
>>> m=nextpow2(1000)
>>> m
10.0
>>> 2**m
1024.0
On Sat, Feb 27, 2010 at 12:41, <josef.pktd@gmail.com> wrote:It's a bitshift operator. Basically "x << y" means "x * (2 ** y)" for
> On Sat, Feb 27, 2010 at 1:31 PM, Charles R Harris
> <charlesr.harris@gmail.com> wrote:
>>
>> On Sat, Feb 27, 2010 at 11:02 AM, Robert Kern <robert.kern@gmail.com> wrote:
>>>
>>> On Sat, Feb 27, 2010 at 04:02, Ivo Maljevic <ivo.maljevic@gmail.com>
>>> wrote:
>>> > David,
>>> > Nice way of avoiding log2, but how do you determine the length of your
>>> > tab
>>> > array?
>>>
>>> The input arrays can only be so large. Even on 64-bit machines, the
>>> table need not have more than 64 entries.
>>>
>>> tab = 2 ** np.arange(np.iinfo(np.intp).bits)
>>>
>>
>> Or
>>
>> tab = 1 << arange(iinfo(intp).bits - 1)
>
> I think I prefer a readable solution to this for calls that are not in
> an inner loop.
>
> scipy.signal.fftconvolve uses the same as Ivo's solution
>
> << means it's much larger than 1 ?
integer arguments.
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
-- Umberto Eco
_______________________________________________