ジュリアにベクトルや行列の番組

SeSodesa:

Iは入力の全体行列の値を計算するスカラー関数の点線のバージョンを使いたいです。この関数は次のように定義されています。

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.私はベクトルを転置場合は作業があるとして、UsかつBs適切に、または私はこの作品を作るための関数自体を複雑にする必要がありますか?

fredrikekre:

機能を行いますSpecificCharge私はベクトルを転置場合は作業があるとして、UsかつBs適切に、または私はこの作品を作るための関数自体を複雑にする必要がありますか?

あなたはそれを試してみましたか?書かれたとして、それは動作しますが、しかし、私はあなたがどちらか移調したい推測していUsたりBs、正しい「カップリング」を取得します。


あなたはジュリアがシングルトン次元で配列を「拡張」します(あなたの例ではベクトルや行列)異なる配列の次元を持つブロードキャストを使用する場合。例えば、ベクターは、各列のベクトルのコピーをマトリックスに拡張します。ここではこれを説明するための一例です

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"

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=391770&siteId=1