- 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).
- Vue.js設計與實現
- 深度實踐OpenStack:基于Python的OpenStack組件開發
- 網店設計看這本就夠了
- iOS開發實戰:從入門到上架App Store(第2版) (移動開發叢書)
- Unity UI Cookbook
- HTML 5與CSS 3權威指南(第3版·上冊)
- Python機器學習之金融風險管理
- Java Web應用開發給力起飛
- Learning Concurrency in Python
- Mastering Embedded Linux Programming
- Mastering ASP.NET Core 2.0
- Oracle SOA Suite 12c Administrator's Guide
- Android項目實戰:博學谷
- Mastering Vim
- 微信公眾平臺服務號開發:揭秘九大高級接口