【问题标题】:converting a 2d cell matrix into a 2d numerical matrix将二维单元矩阵转换为二维数值矩阵
【发布时间】:2014-02-13 00:19:17
【问题描述】:

我是 MATLAB 新手,对如何从元胞数组中获取数值数组感到困惑。根据 MA​​TLAB,我有一些矩阵 result,我得到以下信息:

>> size(result)
ans =
    1    15

>> result
ans =
    Columns 1 through 15
    [3]    [15]    [1x2 double]    [13] ... \\ Omitted for clarity

>> iscell(result)
ans =
    1

因此,结果似乎是一个 1 x 15 维度的二维元胞数组,但其中还有一个子数组 (?),由 [1x2 double] 表示。在此特定示例中,我们假设这些 [1x2 double] 元素中只有一个。换言之,result 由 14 个单元素列和 1 个多元素列组成。

我检查了文档,根据this page 有一个名为cell2mat 的方法。不幸的是,它并不能完全满足我的需求,因为它输出一个 1x16 数字数组:

>> cell2mat(result)
ans =
    3    15    10    7    13 ... \\ Omitted for clarity

在本例中,10 和 7 是构成 [1x2 double] 的元素,只是 MATLAB 在打印元胞数组时无论出于何种原因都没有表明这一点。

问题:有没有办法可以在保留分组的同时将此矩阵转换为数组的数字数组?具体来说,我希望得到 [[3], [15], [10, 7], [13], ...] 形式的东西,并将它们设为 numeric。这可能吗?对于它的价值,我正在使用 MATLAB 和一些来自 matlabcontrol 的 Java 代码,并且该软件似乎需要实值数组。

【问题讨论】:

    标签: arrays matlab cell-array


    【解决方案1】:

    matlab 中没有“java-type”数组这样的东西。您可以拥有 matlab 自己的数组元胞数组,这就是您现在所拥有的。也没有将 matlab 中的单元格数组“直接”转换为 java 数据结构(查看here 以获取有关将 matlab 数据转换为 java 的更多信息)。

    很快,我可以看到您可以考虑的三种可能的方式:

    1. 将您的results 转换为数组的字符串表示形式,将此字符串传递给java,然后将其转换回您想要的任何结构。
    2. 由于单元格作为对象数组进入 java(即Object[]),因此您可以在 java 中使用这些数组以使它们成为您想要的。
    3. 您也可以直接在 matlab 中创建 java 结构,即在将它们传递给您的 java 类/方法之前。因此,您可以将 results 单元格转换为一些 java 数组(例如 java 数组数组)或其他任何东西。这是可能的,因为在 matlab 中您可以使用 java 代码和 java 数据结构。有关在 matlab 中使用 java 的更多信息,请查看here

    【讨论】: