Converting matlab.double to python compatible format

The documentation on this page states that data of type:
MATLAB Input Argument Type —
1-by-N Vector
double (real)
Gets converted to:
Resulting Python Type
array.array('d')
Consequently, I thought this python code would work:
import matlab.engine
import array
me = matlab.engine.start_matlab()
array.array('d', me.rand(1, 2))
However, this returns:
TypeError: must be real number, not matlab.double
What is the most pythonic way to convert a standard matlab double array into a python fundamental data type? (e.g. list or array.array)

Answers (1)

This syntax py.array.array('d', rand(1,2)) should work.
py.array.array('d', rand(1,2))
ans =
Python array: 0.6970 0.3219 Use details function to view the properties of the Python object. Use double function to convert to a MATLAB array.
Or if you want a Python list: py.list(rand(1,2))
py.list(rand(1,2))
ans =
Python list with values: [0.3941618631519793, 0.8464541453090321] Use string, double or cell function to convert to a MATLAB array.

3 Comments

Hi @Selena Mastrodonato, I've unintentionally confused you because my code has matlab syntax highlighting instead of python syntax highlighting. I've edited my question to make the problem clearer.
Hi Lyle, thank you for providing more informations.
You could try this command: me.rand(1, 2)[0].toarray(), you'll obtain array('d', [0.8147236863931789, 0.9057919370756192]).
Instead, if you want a python list you could use numpy, so try this: numpy.array(me.rand(1, 2)[0].toarray()) and you'll obtain [0.81472369 0.90579194].
If you have a multidimensional matrix, try to iterate over it to format data as you wish.

Sign in to comment.

Products

Release

R2023a

Asked:

on 4 May 2023

Commented:

on 8 May 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!