14

私は Julia をいじっていますが、多次元配列の内包表記を機能させることができないようです。私は OSX 用に 0.20-pre のナイトリー ビルドを使用しています。これはおそらくビルドのバグである可能性があります。しかし、それはユーザーのバグだと思います。

次のようなもので終わらせたいとしましょう:

5x2 Array
1 6
2 7
3 8
4 9
5 10

そして、私はただ電話したくありませんreshape。私が知る限り、多次元配列は次のように生成する必要があります[(x, y) for x in 1:5, y in 6:10]。しかし、これはタプルの 5x5 配列を生成します:

julia> [(x, y) for x in 1:5, y in 6:10]
5x5 Array{(Int64,Int64),2}:
 (1,6)  (1,7)  (1,8)  (1,9)  (1,10)
 (2,6)  (2,7)  (2,8)  (2,9)  (2,10)
 (3,6)  (3,7)  (3,8)  (3,9)  (3,10)
 (4,6)  (4,7)  (4,8)  (4,9)  (4,10)
 (5,6)  (5,7)  (5,8)  (5,9)  (5,10)

または、一連の値とそれぞれのブール値コードを生成したいかもしれません:

5x2 Array
1 false
2 false
3 false
4 false
5 false

繰り返しますが、タプルの配列を作成することしかできないようです{(x, y) for x in 1:5, y=false}。周りのかっこを取り除くと、x, yが得られERROR: syntax: missing separator in array expressionます。x, y何かをラップすると、常にそのような出力が得られます -- ArrayArray{Any}、またはTuple.

私の推測では、ここで得られないものがあります。私が何を理解するのを手伝ってくれる人はいますか?

4

7 に答える 7

11

あなたはリストの理解を間違って読んでいるだけだと思います

julia> [x+5y for  x in 1:5, y in 0:1]
5x2 Array{Int64,2}:
 1   6
 2   7
 3   8
 4   9
 5  10

それらを複数の次元で使用すると、2 つの変数が得られ、座標に基づくセル値の関数が必要になります。

2 番目の質問については、要件を再検討する必要があると思います。Julia はパフォーマンスのために型付き配列を使用し、異なる型を異なる列に格納することが可能です。型指定されていない配列を取得するには、[] の代わりに {} を使用できますが、タプルの配列 (Int、Bool) を使用するか、2 つの配列 (1 つは int 用、もう 1 つは bool 用) を使用することをお勧めします。 )。

julia> [(i,false) for i in 1:5]
5-element Array{(Int64,Bool),1}:
 (1,false)
 (2,false)
 (3,false)
 (4,false)
 (5,false)
于 2013-10-13T19:42:30.340 に答える
1

可変性を維持しながらデータ型の効率性について@fawrが与えた答えが好きですが、これにより、あなたが求めていたものがすぐに得られます(ショーンの答えに基づいています):

hcat(1:5,6:10)
hcat({i for i=1:5},falses(5))

2 番目の部分のセル配列内包表記は、データ型を IntXX ではなく Any に強制します。

これも機能します:

hcat(1:5,{i for i in falses(5)})

理解以外に、配列を Any 型に明示的に変換する別の方法は見つかりませんでした。

于 2014-04-20T03:10:15.423 に答える
0

@ivarneが指摘したように

[{x,false} for  x in 1:5]

動作し、変更可能なものを提供します

于 2014-04-01T17:42:00.257 に答える
0

これは別の (複雑ではありますが) 方法です。

x1 = 1
x2 = 5

y1 = 6
y2 = 10

x = [x for x in x1:x2, y in y1:y2]
y = [y for x in x1:x2, y in y1:y2]

xy = cat(2,x[:],y[:])
于 2014-02-10T11:59:28.037 に答える