代码之家  ›  专栏  ›  技术社区  ›  Pigna

朱莉娅:地图和广播有什么区别?

  •  0
  • Pigna  · 技术社区  · 7 年前

    我发现了一些关于Julia用户组的讨论,但它们对我来说太技术化了。

    我想知道在这两者之间选择的标准是什么。

    我正在学习JuliaBox教程,但它并没有解释太多。谢谢

    1 回复  |  直到 7 年前
        1
  •  10
  •   gdmsl    7 年前

    map 和 broadcast 在处理不同维度的多个集合时是不同的。虽然 广播 将尝试将所有对象强制转换为公共维度, 地图 将直接以元素方式应用给定函数。

    julia> map(+, 1, [2,2,2])
    1-element Array{Int64,1}:
     3
    
    julia> broadcast(+, 1, [2,2,2])
    3-element Array{Int64,1}:
     3
     3
     3
    

    广播示例的结果与 map(+, [1,1,1], [2,2,2]) .

    还要注意 广播 当无法在两个参数之间找到公共维度时:

    julia> broadcast(+, [1,2,3], [2 2; 2 0])
    ERROR: DimensionMismatch("arrays could not be broadcast to a common size")
    Stacktrace:
     [1] _bcs1 at ./broadcast.jl:439 [inlined]
     [2] _bcs at ./broadcast.jl:433 [inlined]
     [3] broadcast_shape at ./broadcast.jl:427 [inlined]
     [4] combine_axes at ./broadcast.jl:422 [inlined]
     [5] instantiate at ./broadcast.jl:266 [inlined]
     [6] materialize at ./broadcast.jl:748 [inlined]
     [7] broadcast(::typeof(+), ::Array{Int64,1}, ::Array{Int64,2}) at ./broadcast.jl:702
     [8] top-level scope at none:0
    
    julia> map(+, [1,2,3], [2 2; 2 0])
    3-element Array{Int64,1}:
     3
     4
    
        2
  •  4
  •   Valeriu    5 年前

    这两种方法都对其参数应用函数。两者之间的区别在于如何处理多维数组。

    map 首先尝试压缩arrays列,创建元组迭代器,元组用作给定函数的参数。因此

    julia> map(+, [1,2,3,4], [10, 20, 30, 40])
    4-element Array{Int64,1}:
     11
     22
     33
     44
    

    虽然

    julia> map(+, [1,2,3,4], [10 20; 30 40])
    4-element Array{Int64,1}:
     11
     32
     23
     44
    

    更改第二个阵列的布局时,请注意元素配对。另一方面 broadcast 对给定函数进行元素级应用。如果两个数组参数的维数相同,则元素的配对类似于 地图 .

    julia> broadcast(+, [1,2,3,4], [10, 20, 30, 40])
    4-element Array{Int64,1}:
     11
     22
     33
     44
    

    否则 广播 检查两个数组是否在至少一个维度上匹配,以及至少一个数组的另一个维度是否等于1。如果满足此条件, 广播 通过沿等于1的维度复制数组数据,将数组扩展到公共大小。你就是这样得到的

    julia> broadcast(+, [1, 2, 3, 4], [10 20 30 40])
    4×4 Array{Int64,2}:
     11  21  31  41
     12  22  32  42
     13  23  33  43
     14  24  34  44
    
    推荐文章