如何使用MATLAB进行元胞数组批量提取数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用MATLAB进行元胞数组批量提取数据?相关的知识,希望对你有一定的参考价值。

参考技术A

假设A是209个元素的元胞数组,并且每个元素矩阵的行数相同。

B=[];

for n=1:length(A)

B=[B,An(:,[1 end])];%我不知道你想怎么合并,我就按A1两列A2两列...An两列这样的顺序合了,不是的话你自己改

end

如果每个元胞内的矩阵相同,则可如下处理

num=size(yourcell1,2);

alldata=[yourcell:];

yourdata_1_209=alldata(:,mod((1:end),num)==1 | mod((1:end),num)==209)

yourdata_1_END=alldata(:,mod((1:end),num)==1 | mod((1:end),num)==0)

matlab中{}和()的区别

这几天在写Matlab时,对元胞数组使用了 {} 和 () 运算符,过程总是出现各种问题,简单记录一下。

先来看一下官方解释:您可以使用圆括号 () 对元胞数组进行索引,使用花括号 {} 对元胞的内容进行索引。

换句话说使用 () 得到的结果时元胞集,使用 {} 的到的时元胞中存的数据。

宏观理解元胞数组就是可以包含不同类型数据的数据类型,微观理解是元胞数组是由一个个元胞组成的数组,其中每个元胞只能包含相同类型的数据(数组或者元胞数组)。

而 () 只能索引到元胞集,不能获取到元胞里存储的数据;{} 能获取到元胞里存储的数据。

举个简答的例子:

A = cell(2,2);
B = {‘A‘ ‘B‘;‘C‘ ‘D‘};

 首先声明一个 2 * 2 的空元胞数组A,再声明一个 2 * 2 的元胞数组其有初始值,我们现在要将 B 的第一行数据赋值给 A(1, 1)。

 

假如写成下面这个样子,

A(1, 1) = B(1,:);

看一下结果:

技术图片

 

 

 看来是错误的,分析一下:A(1, 1)索引的是元胞集,可只其结果应该为一个元胞,而 B 本身为元胞数组,B 的第一行是两个元胞,使用两个元胞给一个元胞赋值当然会报错,看错误类型猜测就是数组维度问题。

那加入写成下面的这个样子呢?

A{1, 1} = B{1,:};

运行起来似乎没有任何错误

技术图片

 

查看一下结果:

技术图片

 

 为什么其结果只有一个 A 呢?

分析一下:B{1, :} 为索引 B 第一行元胞的所有值

技术图片

 

 其相当于分别获取了 B 的 (1,1)和(1,2)位置的值,相当于是两个数组,但是 A 的(1,1)位置只能得到第一个数组得值,忽略得不到第二个。

其写法应该类似于(目前只是我的猜测)

A{1, 1} = ‘A‘;
‘B‘

第二个值 ‘B‘ 压根和A{1,1}产生不了任何关系。

 

正确的代码如下:

A{1, 1} = B(1,:);

没有任何错误,结果正确:

技术图片

 

 

 分析一下:A{1, 1}为索引 A 元胞数组中(1,1)位置的内容,我们将 B 的第一行,使用 () 进行索引,相当于得到了一个 1 * 2 的元胞数组,我们将一个元胞数组赋值给了A的(1,1)的元胞。 

 

以上是关于如何使用MATLAB进行元胞数组批量提取数据?的主要内容,如果未能解决你的问题,请参考以下文章

matlab元胞数组如何提取里面的具体元素?

matlab中的元胞数组如何实现批量的赋值呢?

MATLAB中,我要把元胞数组中的字符串提取出来,应该用啥函数?

如何在 Matlab 中使用元胞数组?

matlab怎样合并元胞数组

将元胞数组值提取为 java 数据类型