Vector Examples
Some basic examples with doubles.
import vecxt.all.*
import vecxt.BoundsCheck.DoBoundsCheck.yes
val v1 = Array[Double](1, 2, 3)
// v1: Array[Double] = Array(1.0, 2.0, 3.0)
val v2 = Array[Double](4, 5, 6)
// v2: Array[Double] = Array(4.0, 5.0, 6.0)
v1.dot(v2)
// res0: Double = 32.0
v1.sum
// res1: Double = 6.0
v1.mean
// res2: Double = 2.0
v1.variance
// res3: Double = 1.0
v1.product
// res4: Double = 6.0
v1.norm
// res5: Double = 3.7416573867739413
cosineSimilarity(v1, v2)
// res6: Double = 0.9746318461970762
v1.productExceptSelf.printArr
// res7: String = "[6.0,3.0,2.0]"
v1.increments.printArr
// res8: String = "[1.0,1.0,1.0]"
v1.cumsum.printArr
// res9: String = "[1.0,3.0,6.0]"
v1.logSumExp
// res10: Double = 3.4076059644443806
(v1 + 1.0).printArr
// res11: String = "[2.0,3.0,4.0]"
(v1 + v2).printArr
// res12: String = "[5.0,7.0,9.0]"
(v1 - 1.0).printArr
// res13: String = "[0.0,1.0,0.0]"
(v1 - v2).printArr
// res14: String = "[-3.0,-3.0,-3.0]"
(v1 * 2.0).printArr
// res15: String = "[2.0,4.0,6.0]"
(v1 * v2).printArr
// res16: String = "[4.0,10.0,18.0]"
(v1 / 2.0).printArr
// res17: String = "[0.5,1.0,1.5]"
(v1 / v2).printArr
// res18: String = "[0.25,0.4,0.5]"
(v1.exp).printArr
// res19: String = "[2.718281828459045,7.38905609893065,20.085536923187668]"
(v1.log).printArr
// res20: String = "[0.0,0.6931471805599453,1.0986122886681098]"
(v1 > 2).printArr
// res21: String = "[false,false,true]"
(v1 >= 2).printArr
// res22: String = "[false,true,true]"
(v1 < 2).printArr
// res23: String = "[true,false,false]"
(v1 <= 2).printArr
// res24: String = "[true,true,false]"
(v1(v1 <= 2)).printArr
// res25: String = "[1.0,2.0]"
(v1.outer(v2)).printMat
// res26: String = """4.0 5.0 6.0
// 8.0 10.0 12.0
// 12.0 15.0 18.0"""
v1.exp.printArr
// res27: String = "[2.718281828459045,7.38905609893065,20.085536923187668]"
v1.log.printArr
// res28: String = "[0.0,0.6931471805599453,1.0986122886681098]"
v1.sin.printArr
// res29: String = "[0.8414709848078965,0.9092974268256817,0.1411200080598672]"
(-v1).printArr
// res30: String = "[-1.0,-2.0,-3.0]"
// Many of the urnary ops also have in place version, which would prevent an extra allocation. They have a `!` in their name by convention, and return `Unit`
v1.`exp!`
v1.printArr
// res32: String = "[2.718281828459045,7.38905609893065,20.085536923187668]"
v1.`log!`
v1.printArr
// res34: String = "[1.0,2.0,3.0]"
And Ints. Note that the API here is more limited at the moment.
import vecxt.all.*
import narr.*
import vecxt.BoundsCheck.DoBoundsCheck.yes
val v1 = NArray(1, 2, 3)
// v1: Array[Int] = Array(1, 2, 3)
val v2 = NArray(4, 5, 6)
// v2: Array[Int] = Array(4, 5, 6)
v1.dot(v2)
// res36: Int = 32
(v1 + v2).printArr
// res37: String = "[5,7,9]"
(v1 - v2).printArr
// res38: String = "[-3,-3,-3]"
(v1 > 2).printArr
// res39: String = "[false,false,true]"
(v1 >= 2).printArr
// res40: String = "[false,true,true]"
(v1 < 2).printArr
// res41: String = "[true,false,false]"
(v1 <= 2).printArr
// res42: String = "[true,true,false]"
(v1(v1 <= 2)).printArr
// res43: String = "[1,2]"
In this article