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)的元胞。

原文地址:https://www.cnblogs.com/HyattXia/p/12329616.html

时间: 2024-10-12 02:47:11

matlab中{}和()的区别的相关文章

matlab中filter,conv之间的区别

conv是做卷积,就是按照书上的做法,先翻转,在一步步平移,得出结果.对于两个长度分别为n,m的序列,卷积结果长度为m+n-1 filter是做滤波,其实原理跟卷积是想通的,只不过处理结果的方法不同,先看示例程序: x=[1,2,3,4,5]; h=[1,1,1]; y1=conv(h,x) y2=filter(h,1,x) y3=filter(x,1,h) y4=filter(x,1,[h,zeros(1,4)]) 结果为: y1 = 1     3     6     9    12    

matlab中double、im2double、mat2gray区别

转载:http://blog.sina.com.cn/s/blog_6c41e2f30101559d.html ****************假设某图像数据A(uint8格式)********************** A = 235  200  89  20 >> double(A)                 %返回与原矩阵数值相同但类型为double的矩阵: ans = 235   200 89   20 >> im2double(A)              %返

【caffe-windows】 caffe-master 之Matlab中model的分类应用

此篇讲述在matlab中,如何将训练好的model用于图像分类.将以mnist为例,主要用到caffe-master\matlab\demo 下的classification_demo.m ,可参考我之前的博客 [caffe-windows] caffe-master 之 classfication_demo.m 超详细分析 (http://blog.csdn.net/u011995719/article/details/54135189) 首先贴大神的博客:http://blog.csdn.n

【转】Matlab中的括号()[] {}

Matlab中经常会用到括号去引用某Array或者是cell的内容,但三者有什么具体区别呢?[ ] 中括号用来构建向量(Vectors)或者是矩阵(Matrices).如[6.9 9.64 sqrt(-1)] 就是一个有三个元素的向量. [11 12 13; 21 22 23] 是一个二乘三的矩阵中括号的另一个作用是在函数中,分配输出参数.{ }大括号,用于cell型的数组的分配或引用.比如 A(2,1) = {[1 2 3; 4 5 6]}, or A{2,2} = ('str')( )小括号

Converting Between Image Classes (matlab 中图像类之间的转换)

首先类似于C中的类型转换,matlab中也有其对应的类型转换. For example, a=2;double(a)   ---> 2.0 or 更多位数 a=2.1;uint8(a)   ---> 2,反正是去掉了小数部分. 因为uint8是八个bit即一个byte存储的,因此其范围是0-255,超出255的double数据被强制转换为255,低于0的double数据被强制转换为0,中间的double数据则直接被去除小数部分. a=[0,1;2,0];logical(a) ---> a

Matlab中的变量名

在Matlab中使用save和load命令时,可能会出现变量名出错的问题. 如: save('A1.mat', 'A1'); load('A1.mat', 'A1'); 如果程序中还有名为a1的变量名,则很可能会与A1冲突,将A1变量直接视为a1存储,导致 a1错误,A1消失. 上述问题或者来自于Matlab的变量声明较为简单. 正确的方法应该避免使用同名而大小写有区别的变量.

matlab中syms类型的转换

类型是sym的数字转化为char型 x = sym('2*sqrt(5) + pi') % sym型的数字s = num2str(double(x)) % 将sym型的数字转化为char型 matlab中的sym数据类型转换为double型 >> root=solve('x^2+5*x-10') root = -5/2+1/2*65^(1/2) -5/2-1/2*65^(1/2) >> class(root) ans = sym >> root=double(root)

Matlab中的括号()[]{}

Matlab中的括号()[]{} Matlab中经常会用到括号去引用某Array或者是cell的内容,但三者有什么具体区别呢?[ ] 中括号用来构建向量(Vectors)或者是矩阵(Matrices).如[6.9 9.64 sqrt(-1)] 就是一个有三个元素的向量.[11 12 13; 21 22 23] 是一个二乘三的矩阵. 分号(;)用来结束一行.中括号的另一个作用是在函数中,分配输出参数. { }大括号,用于cell型的数组的分配或引用.比如 A(2,1) = {[1 2 3; 4 5

MATLAB中cell函数用法

cell元包是matlab中提供的一种数据类型,功能强大. 关于cell的创建: 1.跟一般创建举证一样,直接使用C = {A B D E}这种形式,不过这里把"[]"改成了}"{}" 2.使用cell创建cell,C= {C1 C2},这里C1和C2都是cell类型,直接把C1 C2作为一个cell得到的C3是一个1x2的cell数组:使用C3 = [C1 C2],是使用C1和C2的内容来创建cell数组 3.使用cell函数,A=cell(2,2),创建一个空的