Source code for pyntcloud.scalar_fields.eigenvalues
import numpy as np
from .base import ScalarField
class EigenValuesScalarField(ScalarField):
"""
Parameters
----------
ev : list of str
Column names of the eigen values.
Tip:
ev = self.add_scalar_field("eigen_values", ...)
"""
def __init__(self, *, pyntcloud, ev):
super().__init__(pyntcloud=pyntcloud)
self.k = ev[0].split("e1")[1]
self.ev = ev
def extract_info(self):
self.ev = self.pyntcloud.points[self.ev].values
[docs]class Anisotropy(EigenValuesScalarField):
"""
"""
def compute(self):
name = "anisotropy{}".format(self.k)
ev = self.ev
self.to_be_added[name] = np.nan_to_num((ev[:, 0] - ev[:, 2]) / ev[:, 0])
[docs]class Curvature(EigenValuesScalarField):
"""
"""
def compute(self):
name = "curvature{}".format(self.k)
ev = self.ev
self.to_be_added[name] = np.nan_to_num(ev[:, 2] / (ev[:, 0] + ev[:, 1] + ev[:, 2]))
[docs]class Eigenentropy(EigenValuesScalarField):
"""
"""
def compute(self):
name = "eigenentropy{}".format(self.k)
ev = self.ev
result = np.zeros(ev.shape[0])
for i in range(3):
result += ev[:, i] * np.log(ev[:, i])
self.to_be_added[name] = np.nan_to_num(-result)
[docs]class EigenSum(EigenValuesScalarField):
"""
"""
def compute(self):
name = "eigen_sum{}".format(self.k)
self.to_be_added[name] = self.ev[:, 0] + self.ev[:, 1] + self.ev[:, 2]
[docs]class Linearity(EigenValuesScalarField):
"""
"""
def compute(self):
name = "linearity{}".format(self.k)
ev = self.ev
self.to_be_added[name] = np.nan_to_num((ev[:, 0] - ev[:, 1]) / ev[:, 0])
[docs]class Omnivariance(EigenValuesScalarField):
"""
"""
def compute(self):
name = "omnivariance{}".format(self.k)
ev = self.ev
self.to_be_added[name] = np.nan_to_num((ev[:, 0] * ev[:, 1] * ev[:, 2]) ** (1 / 3))
[docs]class Planarity(EigenValuesScalarField):
"""
"""
def compute(self):
name = "planarity{}".format(self.k)
ev = self.ev
self.to_be_added[name] = np.nan_to_num((ev[:, 1] - ev[:, 2]) / ev[:, 0])
class Sphericity(EigenValuesScalarField):
"""
"""
def compute(self):
name = "sphericity{}".format(self.k)
ev = self.ev
self.to_be_added[name] = np.nan_to_num(ev[:, 2] / ev[:, 0])