3

私は Julia をまったく初めて使用するので (今日始めたばかりです)、これがばかげた質問である場合はご容赦ください。ただし、この言語が大好きであるにもかかわらず、優れたデバッグのヘルプがあまり見つかりません。

基本的に、任意のタイプの整数 (int32、uint8 など) を含む配列の入力でアクティブになるメソッドの代替コンストラクターを定義したいだけです。

これは比較的簡単だと思い、次のように書きました。

type MyType
    weight_matrices::Array{Array{FloatingPoint}}

    MyType(layer_sizes::Array{Integer}) =
        new([
            rand(layer_sizes[i], layer_sizes[i+1]) for i in [1:length(layer_sizes)-1]
        ])
end

しかし、私がそれを使ってみたとき:

test = MyType([1,2,1])

エラーが発生します:

ERROR: no method MyType(Array{Int64, 1})

Array{Integer}代替コンストラクターを からに切り替えるArray{Int64}と、想定どおりに問題が解決しますが、使用法をそこまで制限したくありません。

これを行う方法について何か考えはありますか?コードレビューも大歓迎です。このコードはあまり「ジュリアン」ではないと思います (それは問題ですか?)。これを他の人がより使いやすくするためのポインタが欲しいです。

4

1 に答える 1

0

これは機能します:

type MyType     
       weight_matrices::Array{Array{FloatingPoint}}

       MyType(layer_sizes::Array{Int}) =
           new([
               rand(layer_sizes[i], layer_sizes[i+1]) for i in [1:length(layer_sizes)-1]
           ])
   end

julia> test = MyType([1,2,1])
MyType([
1x2 Array{FloatingPoint,2}:
 0.477698  0.454376,

2x1 Array{FloatingPoint,2}:
 0.318465
 0.280079])

Julia コンテナーは共変または反変ではないため[1,2,1]、具象型Intの配列である は抽象型の配列のサブタイプではありませんInteger

(注: Int はネイティブの整数型のエイリアスであり、64 ビット マシンでは Int64、32 ビット マシンでは Int32 です)

入力を異なるタイプの整数にしたい場合は、入力のタイプをパラメーター化します (外部コンストラクターを使用)。

type MyType                                
       weight_matrices::Array{Array{FloatingPoint}}
end

MyType{T<:Integer}(layer_sizes::Array{T}) =
           MyType([rand(layer_sizes[i], layer_sizes[i+1]) for i in                   [1:length(layer_sizes)-1]])

julia> test = MyType([1,2,1])
MyType([
 1x2 Array{FloatingPoint,2}:
 0.28085  0.10863,

2x1 Array{FloatingPoint,2}:
 0.245685
 0.277009])
于 2014-02-11T17:10:17.607 に答える