matlab怎样合并元胞数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab怎样合并元胞数组相关的知识,希望对你有一定的参考价值。

比如 四个元胞数组M=’a‘; ’b‘; ’c‘ N=’e‘;’ f‘; ’g‘ P=’r‘ Q=’h‘
怎样 合并成M N; P Q即’a‘ ’e‘; ’b‘ 'f'; ’c‘ 'g'; 'r' 'h'的形式,一个4*2维的元胞数组而不是2*2维的

直接用 [M N;P Q] 就可以了。

请注意:中括号用于数组拼接,不仅适用于数值型的数组,也适用于cell和struct等等,包括类,比如传递函数tf。

代码:

M='a';'b';'c';

N='e';'f';'g';

P='r';

Q='h';

[M N;P Q]

胞元数组(cell Arry)的基本组分是胞元(cell),每个胞元本身在数组中是平等的,只能以下标区分。胞元可以存放任何类型、任何大小的数组。

如任意维数值数组、字符串数组、符号对象等,而且同一个胞元数组中各胞元中的内容可以不同。与数值数组一样,胞元数组维数不受限制,可以一维、二维或更高维。

不过一维胞元数组用得最多;胞元数组对胞元的编址方法也有单下标编址和全下标编址两种。

参考技术A 楼上的两位都搞太复杂了吧?
直接用 [M N;P Q] 就可以了。
请注意:中括号用于数组拼接,不仅适用于数值型的数组,也适用于cell和struct等等,包括类,比如传递函数tf。

代码:
M='a';'b';'c';
N='e';'f';'g';
P='r';
Q='h';
[M N;P Q]本回答被提问者采纳
参考技术B M='a';'b';'c';
N='e';'f';'g';
P='r';
Q='h';
A=[[M;P] [N;Q]]

A =
'a' 'e'
'b' 'f'
'c' 'g'
'r' 'h'
参考技术C 题目描述能不能详细一点啊 参考技术D 胞元数组(cell Arry)的基本组分是胞元(cell),每个胞元本身在数组中是平等的,只能以下标区分。胞元可以存放任何类型、任何大小的数组,如任意维数值数组、字符串数组、符号对象等,而且同一个胞元数组中各胞元中的内容可以不同。与数值数组一样,胞元数组维数不受限制,可以一维、二维或更高维,不过一维胞元数组用得最多;胞元数组对胞元的编址方法也有单下标编址和全下标编址两种。下面我们就讲解一下胞元数组的创建,以及简单用法。

工具/原料
可正常运行的电脑
matlab软件
方法/步骤
产生数据
在创建胞元数组之前我们先用指令产生不同大小、不同类型的数据,以备后面创建胞元数组使用。具体创建代码及结果如下图所示:

创建胞元数组
对胞元数组来说,在胞元数组中,胞元和胞元内容是两个不同范畴的东西。因此,寻访胞元和寻访胞元中的内容是两种不同的操作。
“胞元标识(cell Indexing)”:以二维胞元数组A为例,A(2,3)是指A胞元数线中的第2行第3列胞元元素;
“胞元内容编址(Content Addressing)”:如A2,3是指A胞元数组第2行第3列胞元中所允许存放的内容。
注意,这两者的以别仅在于所用的括号不同。“外标识的胞元元素”用的是“圆括号”,而“编址胞元元素内涵”用的是“花括号”。下面我们就演示创建胞元数组方法之一,具体代码如下:

胞元的援引
这里要援引胞元时用的是胞元标志,及此时用的是“圆括号”,具体方法如下。从图上我们可以看出用“圆括号”时,援引的是B胞元数组中的第2行第3列胞元元素,而不是第2行第3列胞元存放的内容。而且数据类型为“胞元”。

胞元内容的援引
这里我们援引胞元内容,即使用的是“花括号”。此时援引的是存放在B胞元数组中的第2行第3列胞元的具体内容。下面我们看一下援引胞元内容的具体结果,具体的代码和援引结果请看下图所示:

小 结
1.第二步是创建胞元数组的方法之一,常用于创建小型胞元数组。
2.“圆括号”援引的是胞元,所以a是“cell”型;“花括号”援引的是胞元内容,所以b是“双精度double”型。
3.胞元数组更有效地创建方法是,借助cell指令预定义胞元空数组。

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 cell元胞数组中元素的引用问题

matlab中如何寻找字符串在元胞数组中的位置?

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

matlab中怎样把两个2维数组合并在一起