跳到主要内容

Julia 广播

阐述

标量函数可以以「广播」的形式作用于几个可迭代的实参上,并使用 f.(args...)broadcast(f, args...) 的语法。它有几个特性:

  1. 标量实参和关键字实参调用方式不变,而向量实参按它的维度逐维展开;
  2. 如果有多个向量实参,它们的大小应该是一样的;
  3. 多个广播操作会进行融合
  4. 可以用 .= 语法将广播的结果直接写到预分配的空间中
  5. 可以用 @. 的语法一次性把多个操作广播化

内部实现分为两部分:首先用 broadcasted 形成 Broadcasted 中间结构体;然后用 materialize 执行具体的计算。

风格

BroadcastStyle 类型及其子类型用于控制广播的逻辑。

通常来说,Julia 阵列应该对应的是 AbstractArrayStyle{N},如果定义了自己的阵列类型则可以创建关于它的子类型。

输出阵列

基于指定的风格,重写

Base.similar(bc::Broadcasted{DestStyle}, ::Type{ElType})

可以生成相应的数组。

实际计算

重写 copyto!(::AbstractArray, ::Broadcasted)

实例

f(x,y) = 3x + 4y
f.(pi, A)
f.(A, B)
@. X = sin(cos(Y))

性质

相关内容

参考文献