mirror of
https://github.com/photoprism/photoprism.git
synced 2026-07-17 16:49:04 +00:00
Split the catch-all values.go into one file per concept, each mirrored by its test: distance.go, norm.go, stats.go, product.go, centroid.go, plus the mean methods folded into mean.go and Copy/Dim/Sum into vector.go. Remove values.go, values_test.go, and values_more_test.go so functionality and tests live where developers expect them. Hoist the two 512-dimensional face embeddings shared by the distance, norm, and cosine tests into fixtures_test.go, removing the previous triplication, and decompose the monolithic TestVector into per-concept tests. Close pre-existing coverage gaps in the integer converters and the GeometricMean/HarmonicMean method wrappers, bringing the package to 100% statement coverage. Pure code movement; no behavior change.
29 lines
543 B
Go
29 lines
543 B
Go
package vector
|
|
|
|
import "fmt"
|
|
|
|
// Product returns a vector of element-wise products of two input vectors.
|
|
func Product(a, b Vector) (Vector, error) {
|
|
if len(a) != len(b) {
|
|
return nil, fmt.Errorf("vector dimensions do not match (%d, %d)", len(a), len(b))
|
|
}
|
|
|
|
p := make(Vector, len(a))
|
|
|
|
for i := range a {
|
|
p[i] = a[i] * b[i]
|
|
}
|
|
|
|
return p, nil
|
|
}
|
|
|
|
// DotProduct returns the dot product of two vectors.
|
|
func DotProduct(a, b Vector) (float64, error) {
|
|
p, err := Product(a, b)
|
|
|
|
if err != nil {
|
|
return NaN(), err
|
|
}
|
|
|
|
return p.Sum(), nil
|
|
}
|