- Machine Learning With Go
- Daniel Whitenack
- 327字
- 2021-07-08 10:37:31
Vector operations
As mentioned here, working with vectors necessitates the use of certain vector-/matrix-specific operations and rules. For example, how do we multiply vectors together? How do we know if two vectors are similar? Both gonum.org/v1/gonum/floats and gonum.org/v1/gonum/mat provide built-in methods and functions for vector/slice operations, such as dot products, sorting, and distance. We won't cover all of the functionality here, as there is quite a bit, but we can get a general feel for how we might work with vectors. First, we can work with gonum.org/v1/gonum/floats in the following way:
// Initialize a couple of "vectors" represented as slices.
vectorA := []float64{11.0, 5.2, -1.3}
vectorB := []float64{-7.2, 4.2, 5.1}
// Compute the dot product of A and B
// (https://en.wikipedia.org/wiki/Dot_product).
dotProduct := floats.Dot(vectorA, vectorB)
fmt.Printf("The dot product of A and B is: %0.2f\n", dotProduct)
// Scale each element of A by 1.5.
floats.Scale(1.5, vectorA)
fmt.Printf("Scaling A by 1.5 gives: %v\n", vectorA)
// Compute the norm/length of B.
normB := floats.Norm(vectorB, 2)
fmt.Printf("The norm/length of B is: %0.2f\n", normB)
We can also do similar operations with gonum.org/v1/gonum/mat:
// Initialize a couple of "vectors" represented as slices.
vectorA := mat.NewVector(3, []float64{11.0, 5.2, -1.3})
vectorB := mat.NewVector(3, []float64{-7.2, 4.2, 5.1})
// Compute the dot product of A and B
// (https://en.wikipedia.org/wiki/Dot_product).
dotProduct := mat.Dot(vectorA, vectorB)
fmt.Printf("The dot product of A and B is: %0.2f\n", dotProduct)
// Scale each element of A by 1.5.
vectorA.ScaleVec(1.5, vectorA)
fmt.Printf("Scaling A by 1.5 gives: %v\n", vectorA)
// Compute the norm/length of B.
normB := blas64.Nrm2(3, vectorB.RawVector())
fmt.Printf("The norm/length of B is: %0.2f\n", normB)
The semantics are similar in the two cases. If you are only working with vectors (not matrices), and/or you just need some lightweight and quick operations on slices of floats, then gonum.org/v1/gonum/floats is likely a good choice. However, if you are working with both matrices and vectors, and/or want access to a wider range of vector/matrix functionality, you are likely better off with gonum.org/v1/gonum/mat (along with occasional references to gonum.org/v1/gonum/blas/blas64).
- Advanced Quantitative Finance with C++
- Visual Basic .NET程序設計(第3版)
- Android項目開發入門教程
- 簡單高效LATEX
- JIRA 7 Administration Cookbook(Second Edition)
- Vue.js快跑:構建觸手可及的高性能Web應用
- Mastering Entity Framework
- 零基礎學Java(第4版)
- Backbone.js Blueprints
- 軟件工程
- 大學計算機基礎(第2版)(微課版)
- Asynchronous Android Programming(Second Edition)
- Julia高性能科學計算(第2版)
- Go語言精進之路:從新手到高手的編程思想、方法和技巧(2)
- 微課學人工智能Python編程