mirror of
https://github.com/wassname/simpeg.git
synced 2026-06-28 16:31:04 +08:00
42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
from __future__ import absolute_import
|
|
from __future__ import unicode_literals
|
|
from __future__ import print_function
|
|
from __future__ import division
|
|
from future import standard_library
|
|
standard_library.install_aliases()
|
|
import numpy as np
|
|
from .Maps import *
|
|
|
|
|
|
class Model(np.ndarray):
|
|
|
|
def __new__(cls, input_array, mapping=None):
|
|
assert isinstance(mapping, IdentityMap), 'mapping must be a SimPEG.Mapping'
|
|
assert isinstance(input_array, np.ndarray), 'input_array must be a numpy array'
|
|
assert len(input_array.shape) == 1, 'input_array must be a 1D vector'
|
|
obj = np.asarray(input_array).view(cls)
|
|
obj._mapping = mapping
|
|
if not obj.size == mapping.nP:
|
|
raise Exception('Incorrect size for array.')
|
|
return obj
|
|
|
|
def __array_finalize__(self, obj):
|
|
if obj is None: return
|
|
self._mapping = getattr(obj, '_mapping', None)
|
|
|
|
@property
|
|
def mapping(self):
|
|
return self._mapping
|
|
|
|
@property
|
|
def transform(self):
|
|
if getattr(self, '_transform', None) is None:
|
|
self._transform = self.mapping * self.view(np.ndarray)
|
|
return self._transform
|
|
|
|
@property
|
|
def transformDeriv(self):
|
|
if getattr(self, '_transformDeriv', None) is None:
|
|
self._transformDeriv = self.mapping.deriv(self.view(np.ndarray))
|
|
return self._transformDeriv
|