matlab同时给多个变量赋值(deal)
matlab同时给多个变量赋值
转载⾃
MATLAB中⼀条语句给多个变量赋值(转载)_了凡春秋_新浪博客
⽂本如下
以前⼀直想,要是能够在⼀个语句给多个变量赋值是多么美好的事情呀。⽐如对x,y和z都赋值100
x=y=z=100
对a,b和c分别赋值1,2和3
a,b,c=1,2,3
这样的语句在python是合法的,但是在MATLAB的中是不合法的,
那到底MATLAB中是否有其它解决⽅案呢。呵呵偷偷告诉您,这个是有滴。
MATLAB中提供了deal函数进⾏多变量赋值处理,且⽤处很⼤哦。该函数最基本语法为
[Y1, Y2, Y3, …] = deal(X),即Y1=Y2=Y3=X
[Y1, Y2, Y3, …] = deal(X1, X2, X3, …),即Y1=X1,Y2=X2,Y3=X3
上⾯只是函数的基本⽤法,有些⼈觉得也没什么呀,哈哈其实您错了,这个函数的⽤处⼤着呢。我需要从细⼼看问题,才能看到本质。
在讲解之前先说两个⼩知识点:
(1)如果x={‘mat’,'lab’,'sky’},那么x{:}结果完全等效于:x{1},x{2},x{3},注意三个数据之间有逗号分隔开
(2)如果x(1).url=’mat’,x(2).url=’lab’,x(3).url=’sky’,也就是说x是⼀个结构体数组,那么x.url将完全等效于:
x(1).url,x(2).url,x(3).url,注意有逗号分隔
例⼦1:对x,y,z同时初始化为100
[x,y,z]=deal(100)
x =
100
y =
matlab数组赋值100
z =
100
例⼦2:对a,b,c分别初始化为mat,lab,sky
[a,b,c]=deal(‘mat’,'lab’,'sky’)
a =
mat
b =
lab
c =
sky
例⼦3:将Cell数组x={1 2 3}中的1,2,3分别赋值给a,b,c
x={1 2 3};
[a,b,c]=deal(x{:}) % 注意[a,b,c]=deal({1 2 3})是错误的
a =
1
b =
2
c =
3
例⼦4:将cell数组x={1 2 3}分别付给结构数组y的data字段
x={1 2 3};
[y(1:3).data]=deal(x{:})
y =
1×3 struct array with fields:
data
例⼦5:将结构体数组A的age字段全部赋值为0
[A(1:100).age]=deal(0)
A =
1×100 struct array with fields:
age
如果您的MATLAB版本是7.0以上,那么有时deal函数可以直接省略,请往下看!
其实MATLAB中只要等号两边的表达式中,逗号的个数相等就可以直接省略deal进⾏赋值,注意等号右边的逗号表达式不能⼿⼯敲⼊,只能使⽤x{:}和y.me等两种形式得到的等效逗号表达式,但左边可以使⽤[a,b]的⼿动逗号形式。
x={10 20};
[a,b]=x{:}
a =
10
b =
20
web(1).url=’matlabsky’;web(2).url=’mathsky’;
[a,b]=web.url
a =
matlabsky
b =
mathsky