我想使用标量函数的虚线版本来计算整个输入矩阵的值。该职能的定义如下:
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。
问题是,我不知道朱莉娅的广播是如何运作的。如果我只是适当地转换向量SpecificCharge.和Bs,还是需要使函数本身复杂化才能使其工作呢?
发布于 2020-03-13 11:48:39
执行
SpecificCharge函数。如果我只是适当地转换向量Us和Bs,还是需要将函数本身复杂化才能使其工作呢?
你试过了吗?但是,我猜您想要转换Us或Bs来获得正确的“耦合”。
当您使用具有不同数组维度(示例中的向量和矩阵)的广播时,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"https://stackoverflow.com/questions/60669526
复制相似问题