M.Hiroi's Home Page

Functional Programming

お気楽 Haskell プログラミング入門

[ PrevPage | Haskell | NextPage ]

線形代数編

●hello, hmatrix!!

Prelude> import Prelude hiding ((<>))
Prelude> :m + Numeric.LinearAlgebra
Prelude Numeric.LinearAlgebra> v1 = vector [1,2,3]
Prelude Numeric.LinearAlgebra> :t v1
v1 :: Vector R
Prelude Numeric.LinearAlgebra> v1
[1.0,2.0,3.0]
Prelude Numeric.LinearAlgebra> v2 = vector [4,5,6]
Prelude Numeric.LinearAlgebra> v2
[4.0,5.0,6.0]
Prelude Numeric.LinearAlgebra> v1 + v2
[5.0,7.0,9.0]
Prelude Numeric.LinearAlgebra> v2 - v1
[3.0,3.0,3.0]
Prelude Numeric.LinearAlgebra> v1 <.> v2
32.0

Prelude Numeric.LinearAlgebra> m1 = (2><2) [1,2,3,4] :: Matrix R
Prelude Numeric.LinearAlgebra> m1
(2><2)
 [ 1.0, 2.0
 , 3.0, 4.0 ]
Prelude Numeric.LinearAlgebra> :t m1
m1 :: Matrix R
Prelude Numeric.LinearAlgebra> m2 = (2><2) [5,6,7,8] :: Matrix R
Prelude Numeric.LinearAlgebra> m2
(2><2)
 [ 5.0, 6.0
 , 7.0, 8.0 ]
Prelude Numeric.LinearAlgebra> m1 + m2
(2><2)
 [  6.0,  8.0
 , 10.0, 12.0 ]
Prelude Numeric.LinearAlgebra> m2 - m1
(2><2)
 [ 4.0, 4.0
 , 4.0, 4.0 ]
Prelude Numeric.LinearAlgebra> m1 <> m2
(2><2)
 [ 19.0, 22.0
 , 43.0, 50.0 ]
Prelude Numeric.LinearAlgebra> inv m1
(2><2)
 [ -1.9999999999999998,                  1.0
 ,  1.4999999999999998, -0.49999999999999994 ]
Prelude Numeric.LinearAlgebra> (inv m1) <> m1
(2><2)
 [ 1.0000000000000002, 4.440892098500626e-16
 ,                0.0,    0.9999999999999998 ]

●ベクトルと行列の基礎知識

●ベクトルの基本操作

Prelude Numeric.LinearAlgebra> v = vector [1,2]
Prelude Numeric.LinearAlgebra> v
[1.0,2.0]
Prelude Numeric.LinearAlgebra> w = fromList [3,4] :: Vector R
Prelude Numeric.LinearAlgebra> w
[3.0,4.0]
Prelude Numeric.LinearAlgebra> 5 |> [1..]
[1.0,2.0,3.0,4.0,5.0]
Prelude Numeric.LinearAlgebra> v ! 0
1.0
Prelude Numeric.LinearAlgebra> v ! 1
2.0
Prelude Numeric.LinearAlgebra> atIndex v 0
1.0
Prelude Numeric.LinearAlgebra> atIndex v 1
2.0
Prelude Numeric.LinearAlgebra> size w
2
Prelude Numeric.LinearAlgebra> toList w
[3.0,4.0]

●ベクトルの連結と分解

Prelude Numeric.LinearAlgebra> v1 = vector [1,2,3]
Prelude Numeric.LinearAlgebra> v2 = vector [4,5,6]
Prelude Numeric.LinearAlgebra> v3 = vector [7,8,9]
Prelude Numeric.LinearAlgebra> v4 = vjoin [v1,v2,v3]
Prelude Numeric.LinearAlgebra> v4
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]
Prelude Numeric.LinearAlgebra> subVector 1 4 v4
[2.0,3.0,4.0,5.0]
Prelude Numeric.LinearAlgebra> takesV [2,3,4] v4
[[1.0,2.0],[3.0,4.0,5.0],[6.0,7.0,8.0,9.0]]

●ベクトルの計算

Prelude Numeric.LinearAlgebra> v
[1.0,2.0]
Prelude Numeric.LinearAlgebra> w
[3.0,4.0]
Prelude Numeric.LinearAlgebra> v + 10
[11.0,12.0]
Prelude Numeric.LinearAlgebr> 10 + v
[11.0,12.0]
Prelude Numeric.LinearAlgebra> v * 2
[2.0,4.0]
Prelude Numeric.LinearAlgebra> 2 * v
[2.0,4.0]
Prelude Numeric.LinearAlgebra> v - 10
[-9.0,-8.0]
Prelude Numeric.LinearAlgebra> 10 - v
[9.0,8.0]
Prelude Numeric.LinearAlgebra> v / 2
[0.5,1.0]
Prelude Numeric.LinearAlgebra> 1 / v
[1.0,0.5]
Prelude Numeric.LinearAlgebra> cmap (*2) v
[2.0,4.0]

Prelude Numeric.LinearAlgebra> v + w
[4.0,6.0]
Prelude Numeric.LinearAlgebra> w - v
[2.0,2.0]
Prelude Numeric.LinearAlgebra> v * w
[3.0,8.0]
Prelude Numeric.LinearAlgebra> v / w
[0.3333333333333333,0.5]

Prelude Numeric.LinearAlgebra> v <.> w
11.0
Prelude Numeric.LinearAlgebra> dot v w
11.0
Prelude Numeric.LinearAlgebra> norm_2 v
2.23606797749979
Prelude Numeric.LinearAlgebra> ev = v / scalar (norm_2 v)
Prelude Numeric.LinearAlgebra> ev
[0.4472135954999579,0.8944271909999159]
Prelude Numeric.LinearAlgebra> norm_2 ev
1.0

●行列の基本操作

Prelude Numeric.LinearAlgebra> (><) 2 3 [1..6]
(2><3)
 [ 1.0, 2.0, 3.0
 , 4.0, 5.0, 6.0 ]
Prelude Numeric.LinearAlgebra> (2><3) [1..6]
(2><3)
 [ 1.0, 2.0, 3.0
 , 4.0, 5.0, 6.0 ]
Prelude Numeric.LinearAlgebra> fromLists [[1,2,3],[4,5,6]]
(2><3)
 [ 1.0, 2.0, 3.0
 , 4.0, 5.0, 6.0 ]
Prelude Numeric.LinearAlgebra> a = matrix 3 [1..6]
Prelude Numeric.LinearAlgebra> a
(2><3)
 [ 1.0, 2.0, 3.0
 , 4.0, 5.0, 6.0 ]
Prelude Numeric.LinearAlgebra> b = matrix 3 [4..9]
Prelude Numeric.LinearAlgebra> b
(2><3)
 [ 4.0, 5.0, 6.0
 , 7.0, 8.0, 9.0 ]
Prelude Numeric.LinearAlgebra> size a
(2,3)
Prelude Numeric.LinearAlgebra> rows a
2
Prelude Numeric.LinearAlgebra> cols a
3

Prelude Numeric.LinearAlgebra> a ! 0
[1.0,2.0,3.0]
Prelude Numeric.LinearAlgebra> a ! 0 ! 0
1.0
Prelude Numeric.LinearAlgebra> a ! 1
[4.0,5.0,6.0]
Prelude Numeric.LinearAlgebra> a ! 1 ! 2
6.0
Prelude Numeric.LinearAlgebra> atIndex a (0,0)
1.0
Prelude Numeric.LinearAlgebra> atIndex a (1,2)
6.0
Prelude Numeric.LinearAlgebra> row [1,2,3]
(1><3)
 [ 1.0, 2.0, 3.0 ]
Prelude Numeric.LinearAlgebra> col [1,2,3]
(3><1)
 [ 1.0
 , 2.0
 , 3.0 ]
Prelude Numeric.LinearAlgebra> toLists a
[[1.0,2.0,3.0],[4.0,5.0,6.0]]
Prelude Numeric.LinearAlgebra> rand 3 3
(3><3)
 [  0.1819017982026105,    0.8054357985059898,  0.6154939842482535
 , 0.46874250353721086, 3.9034717734453606e-2, 0.27816141270015454
 ,  0.9679905604422049,   0.36524810612446074, 0.20691627413356503 ]

●行列の連結と分解

Prelude Numeric.LinearAlgebra> a = matrix 3 [1..6]
Prelude Numeric.LinearAlgebra> b = matrix 3 [7..12]
Prelude Numeric.LinearAlgebra> a
(2><3)
 [ 1.0, 2.0, 3.0
 , 4.0, 5.0, 6.0 ]
Prelude Numeric.LinearAlgebra> b
(2><3)
 [  7.0,  8.0,  9.0
 , 10.0, 11.0, 12.0 ]
Prelude Numeric.LinearAlgebra> a ||| b
(2><6)
 [ 1.0, 2.0, 3.0,  7.0,  8.0,  9.0
 , 4.0, 5.0, 6.0, 10.0, 11.0, 12.0 ]
Prelude Numeric.LinearAlgebra> a === b
(4><3)
 [  1.0,  2.0,  3.0
 ,  4.0,  5.0,  6.0
 ,  7.0,  8.0,  9.0
 , 10.0, 11.0, 12.0 ]
Prelude Numeric.LinearAlgebra> fromBlocks [[a, b], [matrix 3 [1..9], matrix 3 [11..19]]]
(5><6)
 [ 1.0, 2.0, 3.0,  7.0,  8.0,  9.0
 , 4.0, 5.0, 6.0, 10.0, 11.0, 12.0
 , 1.0, 2.0, 3.0, 11.0, 12.0, 13.0
 , 4.0, 5.0, 6.0, 14.0, 15.0, 16.0
 , 7.0, 8.0, 9.0, 17.0, 18.0, 19.0 ]
Prelude Numeric.LinearAlgebra> a = matrix 5 [1..20]
Prelude Numeric.LinearAlgebra> a
(4><5)
 [  1.0,  2.0,  3.0,  4.0,  5.0
 ,  6.0,  7.0,  8.0,  9.0, 10.0
 , 11.0, 12.0, 13.0, 14.0, 15.0
 , 16.0, 17.0, 18.0, 19.0, 20.0 ]
Prelude Numeric.LinearAlgebra> takeRows 3 a
(3><5)
 [  1.0,  2.0,  3.0,  4.0,  5.0
 ,  6.0,  7.0,  8.0,  9.0, 10.0
 , 11.0, 12.0, 13.0, 14.0, 15.0 ]
Prelude Numeric.LinearAlgebra> dropRows 1 a
(3><5)
 [  6.0,  7.0,  8.0,  9.0, 10.0
 , 11.0, 12.0, 13.0, 14.0, 15.0
 , 16.0, 17.0, 18.0, 19.0, 20.0 ]
Prelude Numeric.LinearAlgebra> takeColumns 3 a
(4><3)
 [  1.0,  2.0,  3.0
 ,  6.0,  7.0,  8.0
 , 11.0, 12.0, 13.0
 , 16.0, 17.0, 18.0 ]
Prelude Numeric.LinearAlgebra> dropColumns 1 a
(4><4)
 [  2.0,  3.0,  4.0,  5.0
 ,  7.0,  8.0,  9.0, 10.0
 , 12.0, 13.0, 14.0, 15.0
 , 17.0, 18.0, 19.0, 20.0 ]
Prelude Numeric.LinearAlgebra> subMatrix (1,1) (2,2) a
(2><2)
 [  7.0,  8.0
 , 12.0, 13.0 ]
Prelude Numeric.LinearAlgebra> a ?? (Pos (idxs [3, 1]), All)
(2><5)
 [ 16.0, 17.0, 18.0, 19.0, 20.0
 ,  6.0,  7.0,  8.0,  9.0, 10.0 ]
Prelude Numeric.LinearAlgebra> a ?? (Pos (idxs [3, 1]), Range 4 (-2) 0)
(2><3)
 [ 20.0, 18.0, 16.0
 , 10.0,  8.0,  6.0 ]
Prelude Numeric.LinearAlgebra> a ?? (Take 3, Drop 2)
(3><3)
 [  3.0,  4.0,  5.0
 ,  8.0,  9.0, 10.0
 , 13.0, 14.0, 15.0 ]
Prelude Numeric.LinearAlgebra> a ?? (TakeLast 2, DropLast 2)
(2><3)
 [ 11.0, 12.0, 13.0
 , 16.0, 17.0, 18.0 ]

●行列の計算

Prelude Numeric.LinearAlgebra> a
(2><3)
 [ 1.0, 2.0, 3.0
 , 4.0, 5.0, 6.0 ]
Prelude Numeric.LinearAlgebra> b
(2><3)
 [ 4.0, 5.0, 6.0
 , 7.0, 8.0, 9.0 ]
Prelude Numeric.LinearAlgebra> a * 2
(2><3)
 [ 2.0,  4.0,  6.0
 , 8.0, 10.0, 12.0 ]
Prelude Numeric.LinearAlgebra> b / 2
(2><3)
 [ 2.0, 2.5, 3.0
 , 3.5, 4.0, 4.5 ]
Prelude Numeric.LinearAlgebra> cmap (*10) a
(2><3)
 [ 10.0, 20.0, 30.0
 , 40.0, 50.0, 60.0 ]

Prelude Numeric.LinearAlgebra> a + b
(2><3)
 [  5.0,  7.0,  9.0
 , 11.0, 13.0, 15.0 ]
Prelude Numeric.LinearAlgebra> b - a
(2><3)
 [ 3.0, 3.0, 3.0
 , 3.0, 3.0, 3.0 ]
Prelude Numeric.LinearAlgebra> a * b
(2><3)
 [  4.0, 10.0, 18.0
 , 28.0, 40.0, 54.0 ]
Prelude Numeric.LinearAlgebra> a / b
(2><3)
 [               0.25,   0.4,                0.5
 , 0.5714285714285714, 0.625, 0.6666666666666666 ]
Prelude Numeric.LinearAlgebra> a
(2><3)
 [ 1.0, 2.0, 3.0
 , 4.0, 5.0, 6.0 ]
Prelude Numeric.LinearAlgebra> c = matrix 2 [1..6]
Prelude Numeric.LinearAlgebra> c
(3><2)
 [ 1.0, 2.0
 , 3.0, 4.0
 , 5.0, 6.0 ]
Prelude Numeric.LinearAlgebra> d = a <> c
Prelude Numeric.LinearAlgebra> d
(2><2)
 [ 22.0, 28.0
 , 49.0, 64.0 ]
Prelude Numeric.LinearAlgebra> vector [1,2] <# a
[9.0,12.0,15.0]
Prelude Numeric.LinearAlgebra> a #> vector [1,2,3]
[14.0,32.0]

Prelude Numeric.LinearAlgebra> e = ident 2
Prelude Numeric.LinearAlgebra> e
(2><2)
 [ 1.0, 0.0
 , 0.0, 1.0 ]
Prelude Numeric.LinearAlgebra> d <> e
(2><2)
 [ 22.0, 28.0
 , 49.0, 64.0 ]
Prelude Numeric.LinearAlgebra> e <> d
(2><2)
 [ 22.0, 28.0
 , 49.0, 64.0 ]
Prelude Numeric.LinearAlgebra> d <> e == d
True
Prelude Numeric.LinearAlgebra> e <> d == d
True
Prelude Numeric.LinearAlgebra> e <> e
(2><2)
 [ 1.0, 0.0
 , 0.0, 1.0 ]
Prelude Numeric.LinearAlgebra> e <> e == e
True

Prelude Numeric.LinearAlgebra> a1 = matrix 2 [2,3,4,7]
Prelude Numeric.LinearAlgebra> a1
(2><2)
 [ 2.0, 3.0
 , 4.0, 7.0 ]
Prelude Numeric.LinearAlgebra> ra1 = inv a1
Prelude Numeric.LinearAlgebra> ra1
(2><2)
 [  3.5, -1.5
 , -2.0,  1.0 ]
Prelude Numeric.LinearAlgebra> a1 <> ra1
(2><2)
 [ 1.0, 0.0
 , 0.0, 1.0 ]
Prelude Numeric.LinearAlgebra> ra1 #> vector [4,6]
[5.0,-2.0]
Prelude Numeric.LinearAlgebra> ra1 <> matrix 1 [4,6]
(2><1)
 [  5.0
 , -2.0 ]
Prelude Numeric.LinearAlgebra> linearSolve a1 $ matrix 1 [4,6]
Just (2><1)
 [  5.0
 , -2.0 ]
Prelude Numeric.LinearAlgebra> a1
(2><2)
 [ 2.0, 3.0
 , 4.0, 7.0 ]
Prelude Numeric.LinearAlgebra> det a1
2.0
Prelude Numeric.LinearAlgebra> rank a1
2
Prelude Numeric.LinearAlgebra> b1 = matrix 3 [1..9]
Prelude Numeric.LinearAlgebra> b1
(3><3)
 [ 1.0, 2.0, 3.0
 , 4.0, 5.0, 6.0
 , 7.0, 8.0, 9.0 ]
Prelude Numeric.LinearAlgebra> det b1
6.661338147750939e-16
Prelude Numeric.LinearAlgebra> rank b1
2

Prelude Numeric.LinearAlgebra> trace m = sumElements $ takeDiag (m::Matrix R)
Prelude Numeric.LinearAlgebra> trace a1
9.0
Prelude Numeric.LinearAlgebra> trace b1
15.0

●ベクトルと行列の変換

Prelude Numeric.LinearAlgebra> a = matrix 3 [1..9]
Prelude Numeric.LinearAlgebra> a
(3><3)
 [ 1.0, 2.0, 3.0
 , 4.0, 5.0, 6.0
 , 7.0, 8.0, 9.0 ]
Prelude Numeric.LinearAlgebra> toRows a
[[1.0,2.0,3.0],[4.0,5.0,6.0],[7.0,8.0,9.0]]
Prelude Numeric.LinearAlgebra> toColumns a
[[1.0,4.0,7.0],[2.0,5.0,8.0],[3.0,6.0,9.0]]
Prelude Numeric.LinearAlgebra> flatten a
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]
Prelude Numeric.LinearAlgebra> reshape 3 $ vector [1..9]
(3><3)
 [ 1.0, 2.0, 3.0
 , 4.0, 5.0, 6.0
 , 7.0, 8.0, 9.0 ]
Prelude Numeric.LinearAlgebra> asRow $ vector [1,2,3]
(1><3)
 [ 1.0, 2.0, 3.0 ]
Prelude Numeric.LinearAlgebra> asColumn $ vector [1,2,3]
(3><1)
 [ 1.0
 , 2.0
 , 3.0 ]
Prelude Numeric.LinearAlgebra> fromRows [vector [1,2,3], vector [4,5,6]]
(2><3)
 [ 1.0, 2.0, 3.0
 , 4.0, 5.0, 6.0 ]
Prelude Numeric.LinearAlgebra> fromColumns [vector [1,2,3], vector [4,5,6]]
(3><2)
 [ 1.0, 4.0
 , 2.0, 5.0
 , 3.0, 6.0 ]

●ベクトルと行列の生成

Prelude Numeric.LinearAlgebra> konst 0 10 :: Vector R
[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]
Prelude Numeric.LinearAlgebra> konst 1 10 :: Vector R
[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]
Prelude Numeric.LinearAlgebra> konst 2 10 :: Vector I
[2,2,2,2,2,2,2,2,2,2]
Prelude Numeric.LinearAlgebra> konst 0 (3, 3) :: Matrix R
(3><3)
 [ 0.0, 0.0, 0.0
 , 0.0, 0.0, 0.0
 , 0.0, 0.0, 0.0 ]
Prelude Numeric.LinearAlgebra> konst 1 (2, 3) :: Matrix R
(2><3)
 [ 1.0, 1.0, 1.0
 , 1.0, 1.0, 1.0 ]
Prelude Numeric.LinearAlgebra> konst 1 (2, 2) :: Matrix I
(2><2)
 [ 1, 1
 , 1, 1 ]

Prelude Numeric.LinearAlgebra> build 10 id :: Vector R
[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]
Prelude Numeric.LinearAlgebra> build 10 (*2) :: Vector R
[0.0,2.0,4.0,6.0,8.0,10.0,12.0,14.0,16.0,18.0]
Prelude Numeric.LinearAlgebra> build 10 (**2) :: Vector R
[0.0,1.0,4.0,9.0,16.0,25.0,36.0,49.0,64.0,81.0]
Prelude Numeric.LinearAlgebra> build (3, 3) (+) :: Matrix R
(3><3)
 [ 0.0, 1.0, 2.0
 , 1.0, 2.0, 3.0
 , 2.0, 3.0, 4.0 ]
Prelude Numeric.LinearAlgebra> build (3, 3) (\i j -> i * 3 + j) :: Matrix R
(3><3)
 [ 0.0, 1.0, 2.0
 , 3.0, 4.0, 5.0
 , 6.0, 7.0, 8.0 ]
Prelude Numeric.LinearAlgebra> build (3, 3) (\i j -> j * 3 + i) :: Matrix R
(3><3)
 [ 0.0, 3.0, 6.0
 , 1.0, 4.0, 7.0
 , 2.0, 5.0, 8.0 ]

Prelude Numeric.LinearAlgebra> assoc 5 0 [(1,10), (3,20)] :: Vector R
[0.0,10.0,0.0,20.0,0.0]
Prelude Numeric.LinearAlgebra> assoc 5 1 [(1,10), (3,20)] :: Vector R
[1.0,10.0,1.0,20.0,1.0]
Prelude Numeric.LinearAlgebra> assoc 7 2 [(1,10), (3,20), (5,30)] :: Vector R
[2.0,10.0,2.0,20.0,2.0,30.0,2.0]
Prelude Numeric.LinearAlgebra> assoc (3, 3) 0 [((0,0),1), ((2,2),2)] :: Matrix R
(3><3)
 [ 1.0, 0.0, 0.0
 , 0.0, 0.0, 0.0
 , 0.0, 0.0, 2.0 ]
Prelude Numeric.LinearAlgebra> assoc (3, 3) 1 [((1,0),11), ((2,1),12)] :: Matrix R
(3><3)
 [  1.0,  1.0, 1.0
 , 11.0,  1.0, 1.0
 ,  1.0, 12.0, 1.0 ]
Prelude Numeric.LinearAlgebra> assoc (3, 3) 2 [((1,0),21), ((0,2),22), ((2,1),23)] :: Matrix R
(3><3)
 [  2.0,  2.0, 22.0
 , 21.0,  2.0,  2.0
 ,  2.0, 23.0,  2.0 ]

Prelude Numeric.LinearAlgebra> a = vector [1,2,3,4,5,6,7,8]
Prelude Numeric.LinearAlgebra> a
[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0]
Prelude Numeric.LinearAlgebra> accum a (+) [(2,10), (5,20)]
[1.0,2.0,13.0,4.0,5.0,26.0,7.0,8.0]
Prelude Numeric.LinearAlgebra> accum a (-) [(1,10), (6,20)]
[1.0,8.0,3.0,4.0,5.0,6.0,13.0,8.0]
Prelude Numeric.LinearAlgebra> accum a const [(2,10), (4,20), (6, 30)]
[1.0,2.0,10.0,4.0,20.0,6.0,30.0,8.0]
Prelude Numeric.LinearAlgebra> b = matrix 3 [1..9]
Prelude Numeric.LinearAlgebra> b
(3><3)
 [ 1.0, 2.0, 3.0
 , 4.0, 5.0, 6.0
 , 7.0, 8.0, 9.0 ]
Prelude Numeric.LinearAlgebra> accum b (+) [((0,0),10), ((2,1),20), ((1,2), 30)]
(3><3)
 [ 11.0,  2.0,  3.0
 ,  4.0,  5.0, 36.0
 ,  7.0, 28.0,  9.0 ]
Prelude Numeric.LinearAlgebra> accum b (*) [((0,0),10), ((2,1),20), ((1,2), 30)]
(3><3)
 [ 10.0,   2.0,   3.0
 ,  4.0,   5.0, 180.0
 ,  7.0, 160.0,   9.0 ]
Prelude Numeric.LinearAlgebra> accum b const [((0,0),10), ((2,1),20), ((1,2), 30)]
(3><3)
 [ 10.0,  2.0,  3.0
 ,  4.0,  5.0, 30.0
 ,  7.0, 20.0,  9.0 ]

Prelude Numeric.LinearAlgebra> linspace 5 (1,5) :: Vector R
[1.0,2.0,3.0,4.0,5.0]
Prelude Numeric.LinearAlgebra> linspace 9 (1,5) :: Vector R
[1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0]
Prelude Numeric.LinearAlgebra> linspace 10 (0,9) :: Vector R
[0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]
Prelude Numeric.LinearAlgebra> linspace 19 (0,9) :: Vector R
[0.0,0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,8.5,9.0]

Copyright (C) 2021 Makoto Hiroi
All rights reserved.

[ PrevPage | Haskell | NextPage ]