30

How to convert a typed memoryview to an NumPy array in cython? The docs have

cimport numpy as np
import numpy as np

numpy_array = np.asarray(<np.int32_t[:10, :10]> my_pointer)

I took this for my case

np.asarray(<np.float_t[:, :]> my_memview)

Using this the compiler tells me:

Can only create cython.array from pointer or array

Copying or not is not so decicive. I couldn't find any help on this.

1 Answer 1

40

You should just be able to use np.asarray directly on the memoryview itself, so something like:

np.asarray(my_memview)

should work. For example if your cython source file contains this:

import numpy as np
cimport numpy as np
def test(double[:,:] x):
    print type(x)
    print type(np.asarray(x))

Then after compiling it, you should be able to do the following from the python side:

a = np.random.normal(size=(5,5))
test(a)

Which produces the following output:

<type '_cython_magic_0182fca918bfa3618c3553e51b13e8ba._memoryviewslice'>
<type 'numpy.ndarray'>

Note: I'm using the cythonmagic extension for IPython.

Sign up to request clarification or add additional context in comments.

2 Comments

Maybe it was too simple.. Compiles fine now. Would you check my other question? I didn't dare to expand this one
does this not work for struct types? It returns a "TypeError: expected a readable buffer object"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.