binIndices是1*50的cell,每个cell是的1*n(n不定),那么cell2mat(binIndices)得到的是1*sum(cellfun(@length,binIndices))的行向量,比如{1 2 3} {4 5 6}2个cell,得到的是[1 2 3 4 5 6]的行向量。

这样我以为是按列组织,其实不是这样的,估计是按行。

K>> aa = cell{[1;2;3] [4;5;6]}

aa = cell{[1;2;3] [4;5;6]}

错误: 圆括号或方括号不对称或异常。

K>> aa = cell{[1;2;3];[4;5;6]}

aa = cell{[1;2;3];[4;5;6]}

错误: 圆括号或方括号不对称或异常。

K>> aa = {[1;2;3];[4;5;6]}

aa =

[3x1 double]

[3x1 double]

K>> bb=cell2mat(aa)

bb =

1

2

3

4

5

6

...................................................

单纯说按行按列不好理解,直接看例子,明白就好。

K>> aa = {[1;2;3] [4;5;6]}

aa =

[3x1 double] [3x1 double]

K>> bb = cell2mat(aa)

bb =

1 4

2 5

3 6

那么究竟该如何理解呢?看例子。

看matlab给的例子。

Example:

C = {[1] [2 3 4]; [5; 9] [6 7 8; 10 11 12]};

M = cell2mat(C)

结果:

M =

1 2 3 4

5 6 7 8

9 10 11 12

在学习神经网络,BP网络函数里我也遇到这个问题,现在可以解释了。

cell是元胞数组,mat是matrix的缩写。

首先,C = {[1] [2 3 4]; [5; 9] [6 7 8; 10 11 12]};

C元素以“;”为间隔,有两行,没一行也有两个子元素。得到

C{1,1}=1; %为一行一列

C{1,2}=2 3 4; %为一行三列

C{2,1}=5

9; %为两行一列

C{2,2}=6 7 8

10 11 12; %为两行三列

上面这几个可以在matlab里运行求出来。反别将这几组数据结合起来。

[C{1,1} C{1,2};

C{2,1} C{2,2}];得到

[1 2 3 4;

5 6 7 8;

9 10 11 12];

笔者注:从解析可以看出就是直接按行拼接成了矩阵,但由于元宝数组内数据可以不同为,矩阵内必须同维,所以应该不是所有的元宝素组都能转化为矩阵。

再看一个例子,a是1*50的cell,每个cell是1*26,那么cell2mat(a)是1*(50*26)的行向量,如果cell2mat(a')得到50*26。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐