Thanks for your quick reply.

David Cournapeau wrote:

> # a is the original array, n rows/m rows, in C order, as a float*, b
> is an array of pointers, that is defined as float** b
> for i in range(nrows):
>     b[i] = &a[i*m]

I've tried doing something like this, but I still get a bus error. Maybe
I'm doing something very dumb. Here's what I have. For simplicity let's
start with a square array (N,N), and a C function called sum1 that
basically sums all the elements in the array. Here's what my pyx looks like:

import numpy as np
cimport numpy as np
DTYPE = np.float32
ctypedef np.float32_t DTYPE_t

cdef extern float sum1(float **a,int m)

def matmul1(np.ndarray[DTYPE_t, ndim=2] a):
    cdef int N = a.shape[0]
    cdef float *c_arr
    cdef float **b

    c_arr = <float *>a.data

    for i in range(N):
        b[i] = &c_arr[i*N]

    return sum1(b,N)


Compiling and running this in python with a 2D array of the type
np.float32 gives a bus error. Any ideas?

Thanks,

Tiago
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to