Main Content

本页采用了机器翻译。点击此处可查看英文原文。

eye

创建共分布单位矩阵

    说明

    cI = eye(n,codist) 创建一个 n×n 共分布的单位矩阵,并使用 codist 来指定数组值在各个工作进程之间的分布。

    codist 指定为 "codistributed" 以使用默认的 codistributor1d 分发方案或者由 codistributor1dcodistributor2dbc 对象定义的分发方案。

    当您在通信作业或 spmd 代码块中创建协同分布数组时,该函数会在每个工作进程上创建一个数组。如果您在通信作业或 spmd 代码块之外创建协同分布数组,则该数组仅存储在创建该协同分布数组的工作进程或客户端上。

    默认情况下,协同分布数组具有底层类型 double

    示例

    cI = eye(n,m,codist) 创建一个 n×m 共分布的单位矩阵,其中主对角线上为 1,其他地方为 0。例如,eye(2,3,"codistributed") 创建一个 2×3 的协同分布数组。

    示例

    cI = eye(sz,codist) 创建一个共分布单位矩阵,其中大小向量 sz 定义了 cI 的大小。例如,eye([2 3],"codistributed") 还创建一个 2×3 的共分布单位矩阵。

    示例

    cI = eye(___,datatype,codist) 创建一个具有底层数据类型 datatype 的共分布单位矩阵。例如,eye(1,"int8","codistributed") 创建一个共分布的 8 位标量整数 1。您可以将此语法与前面语法中的任何大小参量一起使用。必须在数组大小和数据类型参量后指定 codist

    示例

    cI = eye(___,"noCommunication") 创建一个共分布的单位矩阵,而不使用工作进程之间的通信。

    当您创建非常大的数组或者您的通信作业或 spmd 代码块使用许多工作进程时,工作进程之间的通信可能会减慢数组的创建速度。使用此语法可以减少工作进程之间的通信所需的时间来提高代码的性能。

    提示

    当您使用此语法时,会跳过一些错误检查步骤。在对代码进行原型设计后(无需指定 "noCommunication"),使用此语法可以提高代码的性能。

    您必须在大小、数据类型和 codist 参量后指定 "noCommunication"

    cI = eye(___,like=p) 使用数组 p 来创建一个共分布单位矩阵。您还可以指定 "noCommunication" 作为函数调用的一部分。

    返回的数组 cI 具有与 p 相同的基础类型、稀疏性和复杂度(实数或复数)。

    示例

    全部折叠

    创建一个 1000×1000 的共分布单位矩阵,使用默认分布方案进行分布。

    spmd(4)
        C = eye(1000,"codistributed");
    end

    有 4 个工作进程,每个工作进程包含一个 1000×250 的本地 C 块。

    创建一个 1000×1000 的共分布 uint16 单位矩阵,按其列分布。使用 codistributor1d 对象来定义分发方案。

    spmd(4)
        codist = codistributor1d(2,100*[1:spmdSize]);
        C = eye(1000,1000,"uint16",codist)
    end
    Worker 1: 
      This worker stores C(:,1:100).
              LocalPart: [1000x100 uint16]
          Codistributor: [1x1 codistributor1d]
    Worker 2: 
      This worker stores C(:,101:300).
              LocalPart: [1000x200 uint16]
          Codistributor: [1x1 codistributor1d]
    Worker 3: 
      This worker stores C(:,301:600).
              LocalPart: [1000x300 uint16]
          Codistributor: [1x1 codistributor1d]
    Worker 4: 
      This worker stores C(:,601:1000).
              LocalPart: [1000x400 uint16]
          Codistributor: [1x1 codistributor1d]

    每个工作进程包含一个 1000×100*spmdIndex 的本地 C 片段。

    您还可以通过指定大小向量来获取相同的协同分布数组。

    spmd(4)
        C = eye([1000 1000],"uint16",codist);
    end

    首先,创建一个协同分布数组。指定基础数据类型为 single,并使用默认分布方案。

    spmd(4)
    p = eye(1000,"single","codistributed");
    end

    创建一个与 p 大小和数据类型相同的新协同分布数组。使用二维块循环 codistributor2dbc 函数定义分布方案。

    spmd
    C = eye(size(p),codistributor2dbc,"noCommunication",like=p);
    end

    输入参数

    全部折叠

    单位矩阵第一维的大小,指定为整数。

    • 如果 n 是唯一的整数输入参量,那么 cI 就是一个 n×n 的方阵共分布单位矩阵。

    • 如果 n0,那么 cI 就是空矩阵。

    • 如果 n 为负数,则该函数将其视为 0

    协同分布数组的分布方案,指定为以下选项之一:

    • "codistributed" - 使用默认 codistributor1d 对象定义的默认分发方案。

    • codistributor1d 对象 - 使用 codistributor1d 对象中定义的一维分布方案。要使用默认的一维分布方案,您可以指定不带参量的 codistributor1d 函数。

    • codistributor2dbc 对象 - 使用 codistributor2dbc 对象中定义的二维块循环分布方案。要使用默认的二维块循环分布方案,您可以指定不带参量的 codistributor2dbc 函数。

    共分布单位矩阵的第二维的大小,指定为整数。

    • 如果 m0,那么 cI 就是空矩阵。

    • 如果 m 为负数,则该函数将其视为 0

    数据类型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    每个维度的大小,指定为整数行向量。该向量的每个元素表示相应维度的大小:

    • 如果任意维度的大小为 0,则 cI 就是空数组。

    • 如果任何维度的大小为负数,则该函数将其视为 0

    • 除了第二维度之外,eye 会忽略大小为 1 的尾随维度。例如,eye([3 1 1 1],"codistributed") 生成一个 3×1 共分布单位矩阵。

    示例: sz = [2 3 4] 创建一个 2×3×4 的协同分布数组。

    数据类型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    返回数组的底层数据类型,指定为以下选项之一:

    • "double"

    • "single"

    • "logical"

    • "int8"

    • "uint8"

    • "int16"

    • "uint16"

    • "int32"

    • "uint32"

    • "int64"

    • "uint64"

    要创建的数组的原型,指定为 codistributed 数组。

    如果不指定 datatype,则生成的协同分布数组具有与 p 相同的基础类型、稀疏性和复杂度(实数或复数)。

    版本历史记录

    在 R2006b 中推出