Consider the following Matlab code:
pmod(1).name{1} = 'regressor1';
pmod(1).param{1} = [1 2 4 5 6];
pmod(1).poly{1} = 1;
pmod(2).name{1} = 'regressor2-1';
pmod(2).param{1} = [1 3 5 7];
pmod(2).poly{1} = 1;
This creates a struct array. Each struct in the array contains three fields of type cell
. As such, we have the following hierarchy in pmod
:
pmod // struct array
|
*- struct
| |
| *- cell // contains 1 or more strings
| *- cell // contains 1 or more arrays
| *- cell // contains 1 or more arrays
|
*- struct [...]
I'm trying to use scipy.io
to produce the above data structures in Python, such that they can be loaded into Matlab (this hierarchy is required by SPM).
Creating a struct is straightforward, as scipy.io.savemat
saves any dict whose keys are all of type str
as a Matlab struct:
from scipy.io import savemat
struct = {
'field1': 1,
'field2': 2,
}
savemat('/tmp/p.mat', {'a_struct': struct})
However, when trying to generalize this to a struct array, I hit the following roadblock:
struct_array = [struct, struct]
savemat('/tmp/p.mat', {'s_array': struct_array})
This does not behave as expected; when loading p.mat
into Matlab, I get a 1x2 cell array, not a struct array.
How can I create a struct array using scipy.io
?
Notes:
- I have tried
savemat('/tmp/p.mat', np.array(struct_array))
and savemat('/tmp/p.mat', np.array(struct_array, dtype=object))
, to no avail.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…