ジュリアでベクターを生成する様々な方法
코드
julia> x1=[1 2 3]
1×3 Array{Int64,2}:
1 2 3
julia> x2=[1, 2, 3]
3-element Array{Int64,1}:
1
2
3
julia> x3=[i for i in 1:3]
3-element Array{Int64,1}:
1
2
3
julia> x4=[i for i in 1:3:10]
4-element Array{Int64,1}:
1
4
7
10
julia> x5=[i for i in 1:3:11]
4-element Array{Int64,1}:
1
4
7
10
x1
は2次元配列です。行ベクトルと同じように見えるため、成分座標を1つだけ入力すると、行ベクトルのように認識されます。x2
, x3
, x4
, x5
は1次元配列です。
x=[i for i in n:m]
と入力すると、$n$から$m$までの間隔が$1$の配列を返します。x=[i for i in n:k:m]
と入力すると、$n$から$m$までの間隔が$k$の配列を返します。
最後の要素は$m$以下で最も大きい数です。このようにリスト内にfor
文を含めてリストを作ることを、Pythonなどでリスト内包List Comprehensionと言います。
julia> x6=1:3
1:3
julia> x7=1:3:10
1:3:10
julia> x9=1:3:11
1:3:10
上記のように書くと実際にはそうではないが、事実上x3
, x4
, x5
のような配列が作成されたと考えても良いです。下の写真に示されるように、データタイプは異なるが上で作成されたものと同様に使用できます。
range(n,stop=m,length=k)
: これはマットラボでのlispace(n,m,k)と全く同じです。具体的な違いは以下の例のコードと結果を通じて確認しましょう。
julia> x9=range(1,stop=10)
1:10
julia> x10=range(1,length=15)
1:15
julia> x11=range(1,stop=10,length=15)
1.0:0.6428571428571429:10.0
julia> x12=range(1,length=15,stop=10)
1.0:0.6428571428571429:10.0
このコードも同様に、実際のデータタイプは異なるが事実上同じベクトルを生成すると考えても良いです。マットラボとは異なり、2番目、3番目の変数のうちの1つだけを入力することもでき、入力する順序を変えても構いません。
- 最初の行 は、最初の要素が$1$、最後の要素が$10$のベクトルを返します。他に入力されたものがないので、要素間の間隔は$1$です。
- 二番目の行 は、最初の要素が$1$で、合計$15$個の要素を持つベクトルを返します。間隔は自動的に$1$となり、
x=range(1,stop=15)
あるいはx=1:15
で作成されたベクトルと同じです。 - 三番目の行 は、最初の要素が$1$、最後の要素が$10$で、合計$15$個の要素を持つベクトルを返します。したがって、間隔は自動的に$9/14=0.6428571428571429$となります。これは整数ではないので、自然と実数要素を持つベクトルを返します。また、
x=1.0:0.6428571428571429:10.0
で作成されたものと同じです。 - 四番目の行 は、三番目の行で返されたベクトルと正確に同じベクトルを返します。
타언어
환경
- OS: Windows10
- Version: 1.5.0