我想使用标量函数的虚线版本来计算整个输入矩阵的值。该函数定义如下:
function SpecificCharge(U, r, B)
( 2 * U ) / ( r^2 * B^2 )
end
Run Code Online (Sandbox Code Playgroud)
我想给它以下输入:
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)
Run Code Online (Sandbox Code Playgroud)
结果应该是一个与 维度相同的矩阵Rs
,每个半径由相应的特定电荷替换,由 给出SpecificCharge
。存在对应于每一个通量密度U
-B
对,并且在所述行Rs
对应于电压U
和列的磁通密度B
。
问题是,我不确定 Julia 中的广播是如何工作的。请问功能SpecificCharge.
工作的,如果我刚转矢量Us
和Bs
适当的,或者我需要本身的功能,使这项工作变得复杂?
fre*_*kre 14
功能
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"
Run Code Online (Sandbox Code Playgroud)
如您所见,向量A
已在单例维度上扩展为
julia> A2 = [A A A]
2×3 Array{String,2}:
"A1" "A1" "A1"
"A2" "A2" "A2"
Run Code Online (Sandbox Code Playgroud)
使其具有与 相同的大小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"
Run Code Online (Sandbox Code Playgroud)
现在C
已经扩展到第一维(单例维),本质上
julia> C2 = [permutedims(C); permutedims(C); permutedims(C)]
3×3 Array{String,2}:
"C1" "C2" "C3"
"C1" "C2" "C3"
"C1" "C2" "C3"
Run Code Online (Sandbox Code Playgroud)