如何用SciPy的savemat创建含浮点向量的MATLAB元胞数组
解决SciPy savemat创建单个向量元胞数组的问题
你遇到的核心问题是没有正确构建对应MATLAB单个元胞元素的numpy数组——当前代码把向量的每个元素单独转为object类型,导致存到MATLAB后变成了多个元胞,每个仅装单个数值。
要得到包含整个浮点向量的单个元胞,你需要创建一个包裹原向量的object数组,而非拆分原向量的元素。具体实现代码如下:
import numpy as np from scipy import io # 定义目标浮点向量 vector = np.array([2.3, 66.7, 22.0]) # 创建形状为(1,)的object数组,唯一元素就是完整的原向量 cell_array = np.array([vector], dtype=np.object) # 保存到mat文件 io.savemat('result.mat', {'result': cell_array})
为什么这样能解决问题?
np.array([vector], dtype=np.object)生成的是形状为(1,)的numpy数组,这个数组的唯一元素就是你定义的完整vector,而非拆分后的单个数值。- 当
savemat处理这个object数组时,会将其映射为MATLAB中的1×1元胞数组,元胞内部就是完整的3元素浮点向量,也就是你想要的{[2.3,66.7,22]}。
对比原代码的问题
你之前的np.array(vector, dtype=np.object)会把原向量的每个元素单独转为object类型,生成形状为(3,)的数组。savemat处理这个数组时,会把每个元素都作为独立元胞,因此在MATLAB中得到的是1×3的元胞数组,每个元胞仅装单个数值。
你可以在MATLAB中加载验证结果:
load('result.mat'); disp(result);
输出会符合预期:
result = 1×1 cell array {[2.3000 66.7000 22.0000]}
内容的提问来源于stack exchange,提问作者jcavner
相关产品推荐
相关产品推荐

