切变量
一个切变量是一个,其价值可分为段,还是片,然后对分别由不同的工人操作。每个迭代循环的工作在不同的数组。使用切变量可以减少客户机和工人之间的沟通。
在这个例子中,工人们应用f
的元素一个
分开。
parfori = 1:长度B (A) (i) = f ((i));结束
一个切片变量的特征
如果一个变量parfor
循环有以下特征,那么变量是切片:
类型的一级索引——第一级索引要么是括号,
()
或括号,{}
。固定指数清单——一级括号内或括号,指标是相同的列表出现的所有给定的变量。
形式的索引,索引的列表内的变量,一个指数涉及循环变量。
数组,数组的形状保持不变的形状。在切变量分配,右边的任务不能
[]
或”
,因为这些运营商试图删除元素。
类型的一级索引。切变量,第一级索引被括在括号里,()
或括号,{}
。
这是第一级的形式索引的数组切片,切片。
不切 | 切片 |
---|---|
A.x |
(…) |
a (…) |
一个{…} |
第一层之后,您可以使用任何类型的有效的MATLAB®索引在第二和随后的水平。
的变量一个
这里显示左边不是切片;右边所示是切片。
一个。我{12}{我12}。q
固定指标清单。在切片的一级索引变量,指标是相同的列表出现的所有给定的变量。
的变量一个
左边是不切,因为一个
是被我
和我+ 1
在不同的地方。在右边的代码,变量一个
正确切片。
不切 | 切片 |
---|---|
parfori = 1: k B h(,) =((我),(i + 1));结束 |
parfori = 1: k B (i) = f ((i));C (i) = g ({});结束 |
右边的例子显示了出现的一级索引使用括号及括号在同一循环,这是可以接受的。
下面的例子在左边不切一个
因为索引一个
在所有的地方是不一样的。右边的例子片一个
和B
。的索引一个
不一样的索引B
。然而,索引的一个
和B
分别是一致的。
不切 | 切片 |
---|---|
parfor我= 1:10 b = (1) + (2)结束 |
= (1 2 3 4 5 6 7 8 9 10;20 30 40 50 60 70 80 90 100];B = 0 (10);parfori = 1:10为n = 1:2 (i) = B(我)+ (n,我)结束结束 |
形式的索引。在切片的一级索引变量,一个索引表达式的形式我
,我+ k
,i (k
,或k +我
。该指数我
循环变量和吗k
是一个标量整数常数或一个简单的(物价)广播变量。其他索引表达式是一个正整数常数,一个简单的(物价)广播变量,一个嵌套为
循环索引变量、结肠或结束
。
与我
循环变量,一个
变量显示在左边不切片,虽然一个
右边的变量是切片。
不切 | 切片 |
---|---|
(我+ f (k), j,:, 3)% f (k)无效的切片(我,20:30,结束)不是标量% 20:30(我:s.field1)% s。f我eld1 not simple broadcast var |
(i + k, j: 3)一个(我:结束)(我:k) |
当你使用其他变量随循环变量索引数组,你不能设置这些变量在循环。实际上,这些变量是常数在整个的执行parfor
声明。你不能循环变量与自身结合,形成一个索引表达式。
数组的形状。一个切片变量必须保持一个恒定的形状。的变量一个
这里不是切片:
(我:)= [];
一个
不是切片,因为改变的形状切数组将违反假设管理客户机和工人之间的沟通。
切片的输入和输出变量
切变量可以是输入变量、输出变量,或两者兼而有之。MATLAB传送切片输入变量从客户机向工人,和切片输出变量从工人回到客户机。如果一个变量是输入和输出,它是在两个方向上传播。
在这个parfor
循环,一个
是一个切片输入变量和B
是一个切片输出变量。
一个=兰德(10);parfor2 = 1:10 B (ii) = (2);结束
MATLAB决定,然而,如果在每个迭代中,切变量元素设置之前使用,然后用MATLAB不传送变量工人。在这个例子中,所有的元素一个
设置之前使用。
parfor2 = 1:n如果someCondition (ii) = 32;其他的(二)= 17;结束%的循环代码使用一个(2)结束
Sliced-output变量可以通过索引分配动态生长与默认值插入到中间指标。在这个示例中,您可以看到默认值(0)一直在插入在几个地方一个
。
一个= [];parforidx = 1:10如果兰德< 0.5 (idx) = idx;结束结束disp(一个);
0 2 0 4 5 0 0 8 9 10
即使一个切片变量不是显式地引用作为输入,隐式使用可以让它如此。在接下来的例子中,并非所有的元素一个
必然是在吗parfor
循环。因此收到原始数组的值,然后返回的循环。
一个= 1:10;parfor2 = 1:10如果兰德< 0.5 (2)= 0;结束结束
在某些情况下,parfor
循环必须假设一个工人可能需要的所有片段切变量。在本例中,它是不可能确定哪些元素的变量将在执行之前读片,parfor
发送所有可能的领域。
一个= 1:10;parfor2 = 1:11如果二< =兰迪(11 [10])(ii) = (2) + 1;结束结束
嵌套的为
循环使用切片变量
当你指数变量与一个嵌套片为
循环变量,记住这些要求:
切变量必须在相应的封闭
为
循环。在这个例子中,左边的代码不工作因为它切变量索引
一个
外的嵌套为
循环定义j
。不切 切片 一个= 0 (10);parfori = 1:10为j = 1:10结束(i, j) = 1;结束
一个= 0 (10);parfori = 1:10为j = 1:10 (i, j) = 1;结束结束
的范围
为
循环变量必须是积极的一个行向量不变的数字或变量。在这个例子中,左边的代码不工作,因为它定义了嵌套的上限
为
循环函数调用。右边的代码提供了一个解决方案通过定义一个常数变量外的上限parfor
循环。不切 切片 一个= 0 (10);parfori = 1:10为j = 1:尺寸(2)(i, j) = 1;结束结束
一个= 0 (10);L =大小(2);parfori = 1:10为j = 1: L (i, j) = 1;结束结束
的
为
循环变量不能被分配的为
声明。在这个例子中,左边的代码不工作因为它重新分配
为
内循环变量为
循环。右边的代码提供了一个解决方案通过分配我
临时变量t
。不切 切片 一个= 0 (10);parfori = 1:10为j = 1:10如果我= = j j =;(i, j) = j;结束结束结束
一个= 0 (10);parfori = 1:10为j = 1:10如果我= = t j =;(i, j) = t;结束结束结束
数据类型的限制
一些MATLAB数据类型不支持被用作切片的输入或输出变量万博1manbetx
parfor
循环。使用一个变量作为切变量parfor
实现必须能够使用索引扩展变量。以下数据类型不支持切变量:万博1manbetx
字典
表
当你使用切片数组
处理
MATLAB构造对象,默认的元素。有关更多信息,请参见初始化数组的处理对象。