将2d单元矩阵转换为2d数值矩阵

时间:2014-02-13 00:19:18

标签: arrays matlab cell-array

我是MATLAB的新手,对于如何从单元格数组中获取数值数组感到困惑。根据MATLAB,我有一些矩阵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由十四个单元素列和一个多元素列组成。

我检查了文档,根据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],...]的形式,并将它们作为数字。这可能吗?对于它的价值,我正在使用MATLAB和matlabcontrol中的一些Java代码,而且该软件似乎需要实值数组阵列。

1 个答案:

答案 0 :(得分:1)

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

很快,我可以看到三种可能的方法:

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