考虑以下Matlab代码:
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;
这会创建一个struct数组.数组中的每个结构包含三个类型为cell的字段.因此,我们在pmod中有以下层次结构:
pmod // struct array
|
*- struct
| |
| *- cell // contains 1 or more strings
| *- cell // contains 1 or more arrays
| *- cell // contains 1 or more arrays
|
*- struct [...]
我正在尝试使用scipy.io在Python中生成上述数据结构,以便可以将它们加载到Matlab中(SPM要求此层次结构).
创建一个结构很简单,因为scipy.io.savemat将任何类型为str的键都保存为Matlab结构:
from scipy.io import savemat
struct = {
'field1': 1,
'field2': 2,
}
savemat('/tmp/p.mat', {'a_struct': struct})
但是,当试图将其概括为结构数组时,我遇到了以下障碍:
struct_array = [struct, struct]
savemat('/tmp/p.mat', {'s_array': struct_array})
这不符合预期;当将p.mat加载到Matlab中时,我得到一个1×2的单元格数组,而不是一个struct数组.
如何使用scipy.io创建结构数组?
笔记:
>我尝试过savemat(‘/ tmp / p.mat’,np.array(struct_array))和savemat(‘/ tmp / p.mat’,np.array(struct_array,dtype = object)),但无济于事.