import scipy.linalg.norm lazily
This commit is contained in:
parent
43b4b63a63
commit
2b0df524cb
1 changed files with 10 additions and 5 deletions
|
@ -6,7 +6,6 @@ from pprint import pprint
|
||||||
from typing import Optional, Self, Sequence, TypeAlias
|
from typing import Optional, Self, Sequence, TypeAlias
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import scipy
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from c3nav.mapdata.models import MapUpdate, Space
|
from c3nav.mapdata.models import MapUpdate, Space
|
||||||
|
@ -203,6 +202,12 @@ class Locator:
|
||||||
from scipy.optimize import least_squares
|
from scipy.optimize import least_squares
|
||||||
return least_squares
|
return least_squares
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def norm_func(self):
|
||||||
|
# this is effectively a lazy import to save memory… todo: do we need that?
|
||||||
|
from scipy.linalg import norm
|
||||||
|
return norm
|
||||||
|
|
||||||
def locate_range(self, scan_data: ScanData, permissions=None, orig_addr=None):
|
def locate_range(self, scan_data: ScanData, permissions=None, orig_addr=None):
|
||||||
pprint(scan_data)
|
pprint(scan_data)
|
||||||
|
|
||||||
|
@ -238,10 +243,10 @@ class Locator:
|
||||||
|
|
||||||
# rating the guess by calculating the distances
|
# rating the guess by calculating the distances
|
||||||
def diff_func(guess):
|
def diff_func(guess):
|
||||||
result = scipy.linalg.norm(np_ranges[:, :dimensions] - guess[:dimensions], axis=1) - measured_ranges
|
result = self.norm_func(np_ranges[:, :dimensions] - guess[:dimensions], axis=1) - measured_ranges
|
||||||
# print(result)
|
# print(result)
|
||||||
return result
|
return result
|
||||||
# factors = scipy.linalg.norm(np_ranges[:, :dimensions] - guess[:dimensions], axis=1) / measured_ranges
|
# factors = self.norm_func(np_ranges[:, :dimensions] - guess[:dimensions], axis=1) / measured_ranges
|
||||||
# return factors - np.mean(factors)
|
# return factors - np.mean(factors)
|
||||||
|
|
||||||
def cost_func(guess):
|
def cost_func(guess):
|
||||||
|
@ -294,12 +299,12 @@ class Locator:
|
||||||
print()
|
print()
|
||||||
print("measured ranges:", ", ".join(("%.2f" % i) for i in tuple(np_ranges[:, 3])))
|
print("measured ranges:", ", ".join(("%.2f" % i) for i in tuple(np_ranges[:, 3])))
|
||||||
print("result ranges:", ", ".join(
|
print("result ranges:", ", ".join(
|
||||||
("%.2f" % i) for i in tuple(scipy.linalg.norm(np_ranges[:, :dimensions] - result_pos[:dimensions], axis=1))
|
("%.2f" % i) for i in tuple(self.norm_func(np_ranges[:, :dimensions] - result_pos[:dimensions], axis=1))
|
||||||
))
|
))
|
||||||
if orig_xyz is not None:
|
if orig_xyz is not None:
|
||||||
print("correct ranges:", ", ".join(
|
print("correct ranges:", ", ".join(
|
||||||
("%.2f" % i)
|
("%.2f" % i)
|
||||||
for i in tuple(scipy.linalg.norm(np_ranges[:, :dimensions] - orig_xyz[:dimensions], axis=1))
|
for i in tuple(self.norm_func(np_ranges[:, :dimensions] - orig_xyz[:dimensions], axis=1))
|
||||||
))
|
))
|
||||||
print()
|
print()
|
||||||
print("diff result-measured:", ", ".join(
|
print("diff result-measured:", ", ".join(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue