使用 SciPy 和 MATLAB,我无法重建数组以匹配使用 scipy.io.loadmat() 加载的 MATLAB 单元数组给出的内容。
例如,假设我在 MATLAB 中创建了一个包含一对双精度数组的单元格,然后使用 scipy.io 加载它(我正在使用 SPM 与 pynifti 等进行成像分析)
MATLAB
>> onsets{1} = [0 30 60 90]
>> onsets{2} = [15 45 75 105]
Python
>>> import scipy.io as scio
>>> mat = scio.loadmat('onsets.mat')
>>> mat['onsets'][0]
array([[[ 0 30 60 90]], [[ 15 45 75 105]]], dtype=object)
>>> mat['onsets'][0].shape
(2,)
我的问题是:为什么这个 numpy 数组的形状是 (2,) 而不是 (2,1,4)?在现实生活中,我正在尝试使用 Python 解析日志文件并构建这些起始单元格数组,因此我希望能够从头开始构建它们。
当我尝试从打印输出构建相同的数组时,我得到了不同的形状:
>>> new_onsets = array([[[ 0, 30, 60, 90]], [[ 15, 45, 75, 105]]], dtype=object)
array([[[0, 30, 60, 90]],
[[15, 45, 75, 105]]], dtype=object)
>>> new_onsets.shape
(2,1,4)
不幸的是,形状(单元格数组中的双精度向量)是在上游规范中编码的,所以我需要能够以这种格式准确地保存它。当然,这没什么大不了的,因为我可以在 MATLAB 中编写解析器,但是弄清楚发生了什么并增加我对 numpy 的[微不足道] 知识会很好。