You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:07:41