2024年2月3日发(作者:)
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(1).url,x(2).url,x(3),注意有逗号分隔
例子1:对x,y,z同时初始化为100
1. >> [x,y,z]=deal(100)
2.
3. x =
4.
5. 100
6.
7.
8. y =
9.
10. 100
11.
12.
13.z =
14.
15. 100
复制代码
例子2:对a,b,c分别初始化为mat,lab,sky
1. >> [a,b,c]=deal('mat','lab','sky')
2.
3. a =
4.
5. mat
6.
7.
8. b =
9.
11.
12.
13.c =
14.
复制代码
例子3:将Cell数组x={1 2 3}中的1,2,3分别赋值给a,b,c
1. >> x={1 2 3};
2. >> [a,b,c]=deal(x{:}) % 注意[a,b,c]=deal({1 2 3})是错误的
3.
4. a =
5.
6. 1
7.
8.
9. b =
10.
11. 2
12.
13.
14.c =
15.
16. 3
复制代码
例子4:将cell数组x={1 2 3}分别付给结构数组y的data字段
1. >> x={1 2 3};
2. >> [y(1:3).data]=deal(x{:})
3.
4. y =
5.
6. 1x3 struct array with fields:
7. data
复制代码
例子5:将结构体数组A的age字段全部赋值为0
1. >> [A(1:100).age]=deal(0)
2.
3. A =
4.
5. 1x100 struct array with fields:
6. age
复制代码
讲了那么多例子大家应该明白的差不多了,并且应该能够举一反三了吧。如果还是不行,请发帖提问,我会解答的。另外还有一个好消息,如果您的MATLAB版本是7.0以上,那么有时deal函数可以直接省略,请往下看!
其实MATLAB中只要等号两边的表达式中,逗号的个数相等就可以直接省略deal进行赋值。
1. >> x={10 20};
2. >> [a,b]=x{:}
3.
4. a =
5.
6. 10
7.
8.
9. b =
10.
11. 20
12.
13.>> web(1).url='matlabsky';web(2).url='mathsky';
14.>> [a,b]=
15.
16.a =
17.
sky
19.
20.
21.b =
22.
y
复制代码
再次重申下,不管deal函数还是省略deal函数的多变量赋值
(1)等号右边的逗号表达式不能手工敲入,只能通过x{:}和等类似形式的等效逗号表达式
(2)左边的逗号表达式没有限制,可以使用[a,b]的手动逗号形式或者x{:}的等效形式
(3)左边逗号表达式中必须包含方括号,例如a,b,c=A{:}形式是错误的
(4)当左边和右边的逗号个数相等时,在MATLAB7.0之后,deal函数可以省略
本文发布于:2024-02-03 14:48:43,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170694292450665.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |