主要内容

切变量

一个切变量是一个,其价值可分为段,还是,然后对分别由不同的工人操作。每个迭代循环的工作在不同的数组。使用切变量可以减少客户机和工人之间的沟通。

在这个例子中,工人们应用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:10n = 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:10j = 1:10结束(i, j) = 1;结束
    一个= 0 (10);parfori = 1:10j = 1:10 (i, j) = 1;结束结束
  • 的范围循环变量必须是积极的一个行向量不变的数字或变量。

    在这个例子中,左边的代码不工作,因为它定义了嵌套的上限循环函数调用。右边的代码提供了一个解决方案通过定义一个常数变量外的上限parfor循环。

    不切 切片
    一个= 0 (10);parfori = 1:10j = 1:尺寸(2)(i, j) = 1;结束结束
    一个= 0 (10);L =大小(2);parfori = 1:10j = 1: L (i, j) = 1;结束结束
  • 循环变量不能被分配的声明。

    在这个例子中,左边的代码不工作因为它重新分配内循环变量循环。右边的代码提供了一个解决方案通过分配临时变量t

    不切 切片
    一个= 0 (10);parfori = 1:10j = 1:10如果我= = j j =;(i, j) = j;结束结束结束
    一个= 0 (10);parfori = 1:10j = 1:10如果我= = t j =;(i, j) = t;结束结束结束

数据类型的限制

  • 一些MATLAB数据类型不支持被用作切片的输入或输出变量万博1manbetxparfor循环。使用一个变量作为切变量parfor实现必须能够使用索引扩展变量。

    以下数据类型不支持切变量:万博1manbetx

    • 字典

相关的话题