[SciPy-Dev] Multilinear interpolation

Pablo Winant pablo.winant@gmail....
Mon Feb 25 14:04:10 CST 2013


On 25/02/2013 14:32, Pauli Virtanen wrote:
> Pablo Winant <pablo.winant <at> gmail.com> writes:
> [clip]
>> So I made an attempt using tempita in the case of regularly spaced
>> grids. For now, it is in a temporary repository in github:
>>
>> https://github.com/albop/python_interpolation
> [clip]
>
> Some comments:
>
> - "#pragma omp parallel for" statement probably doesn't do
>    anything: Cython interprets it as a comment.

yes, my mistake, I intended to write "with nogil, parallel():" instead
> - The code assumes C-contiguous arrays, but does not check for it.
right
> - Do you actually need code generation here? The templated loops
>    can be replaced by N-dim untemplated loops. The question is
>    probably mostly about speed.
I wonder too. The motivation was indeed speed but there may be a better 
way.

> - The inner evaluation loop should be inside `with nogil`
>
> [clip]
>> Before, I do the same for irregularly spaced grid, I have some questions:
>> - I included the templates as Python strings in the .pyx.in file . Was
>> there a better way ?
> As the script is executable by Python, the file extension should be .py.
> You can either put the template itself to a separate file (.pyx.in)
> --- note that you can put Python code inside tempita templates.
> Alternatively, rename the script to `generate_multilinear.py`.
>
> Note that tempita templates can contain executable blocks, so you can
> for instance put some logic there, and use the template syntax for the
> loops.
OK, as the python code is minimal, I will try to include everything in 
the template.

>> - I was not sure about how to deal with single/double precision in the
>> cython code.
> You can use fused types instead of templating; the end result is the same,
> but Cython takes care of picking the correct routine.
>
I tried it but I didn't see how to do it. I would like to do define a 
function like

def function(ndarray[fused_type, ndim=2]):
     ...
     cdef fused_type internal_variable
     ...
     return something


but it doesn't work. From this thread 
[https://groups.google.com/forum/?fromgroups=#!topic/cython-users/GwvZiAdRJpM] 
I understand I should do :

ctypedef fused  myarray:
     ndarray[type1, ndim=2]
     ndarray[type2, ndim=2]

def function(myarray):
     ...
     cdef (?) internal_variable

but then how do I define scalars of the same dtype as the array arguments ?


More information about the SciPy-Dev mailing list