【问题标题】:Broadcasting vectors and matrices in Julia在 Julia 中广播向量和矩阵
【发布时间】:2020-06-25 09:56:30
【问题描述】:

我想使用标量函数的虚线版本来计算整个输入矩阵的值。函数定义如下:

function SpecificCharge(U, r, B)
 ( 2 * U ) / ( r^2 * B^2 )
end

我想给它以下输入:

const Us = [ # voltages U
  228.9, 243, 257, 271, 285, 300
]

const Rs = [ # radii r
  9 7 5.8 5 4.3 3.9;
  10.5 8.1 6.7 5.7 4.9 4.5;
  10.1 8.3 7.1 6.5 6 4.8;
  11.1 9.0 7.2 6.5 5.6 5.1;
  10.5 8.3 7.8 6.5 5.7 5.4;
  11.9 8.9 8.0 7.4 6.2 5.5
]

const Bs = [ # flux densities B
  0.0007332339999999999, 0.00089328, 0.0010421599999999999, 0.00119104, 0.00133992, 0.0014873112
]

# Calling the dotted version of the function
specific_charges = SpecificCharge.(Us, Rs, Bs)

结果应该是一个与Rs 相同维度的矩阵,每个半径都替换为SpecificCharge 给出的相应特定电荷。每个U--B 对对应一个磁通密度,Rs 中的行对应于电压U,列对应磁通密度B

问题是,我不确定 Julia 中的广播是如何工作的。如果我只是适当地转置向量UsBs,函数SpecificCharge. 是否按原样工作,还是需要使函数本身复杂化才能使其工作?

【问题讨论】:

    标签: julia


    【解决方案1】:

    执行函数SpecificCharge。照原样工作,如果我只是适当地转置向量 UsBs,还是需要使函数本身复杂化才能使其工作?

    你试过了吗?它按书面形式工作,但是,我猜您想转置 UsBs 以获得正确的“耦合”。


    当您使用具有不同数组维度(在您的示例中为向量和矩阵)的广播时,Julia 将“扩展”单一维度中的数组。例如。一个向量将被扩展为一个矩阵,每列都有一个向量的副本。这是一个例子来说明这一点

    julia> A = ["A1", "A2"];
    
    julia> B = ["B11" "B12" "B13";
                "B21" "B22" "B23"];
    
    julia> f(args...) = join(args, ", ");
    
    julia> f.(A, B)
    2×3 Array{String,2}:
     "A1, B11"  "A1, B12"  "A1, B13"
     "A2, B21"  "A2, B22"  "A2, B23"
    

    如你所见,向量A已在单例维度上扩展为

    julia> A2 = [A A A]
    2×3 Array{String,2}:
     "A1"  "A1"  "A1"
     "A2"  "A2"  "A2"
    

    使其具有与B 相同的大小,然后将f 应用于每一对。要在另一个维度上扩展向量,您需要对其进行置换;

    julia> C = ["C1", "C2", "C3"];
    
    julia> f.(B, permutedims(C))
    2×3 Array{String,2}:
     "B11, C1"  "B12, C2"  "B13, C3"
     "B21, C1"  "B22, C2"  "B23, C3"
    

    现在C 已经在第一个维度(单例维度)中进行了扩展,本质上

    julia> C2 = [permutedims(C); permutedims(C); permutedims(C)]
    3×3 Array{String,2}:
     "C1"  "C2"  "C3"
     "C1"  "C2"  "C3"
     "C1"  "C2"  "C3"
    

    【讨论】:

      猜你喜欢
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 2019-03-06
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多