У меня есть некоторые данные x1, y1, z1. В котором я хочу сделать интерполяцию новых точек. У меня есть некоторые значения nan в z1, поэтому я замаскировал эти значения nan, но после маскировки значения z1 nan я получаю ошибку при выполнении интерполяции.
1- Как решить ошибку TypeError: неподдерживаемые типы операндов для *: 'float' и 'SingleBlockManager'? 2- В этом коде я делаю интерполяцию с использованием ISD, и значения не настолько корректны. Есть ли какой-либо другой метод интерполяции, в котором я могу получить правильные значения интерполяции, я попытался выполнить линейную интерполяцию и кубическую интерполяцию, в которой в некоторых значениях я получал значения NaN в качестве интерполяции значения
import numpy as np
x1=[86.092069,86.092058,86.092044,86.092027,86.092013]
y1=[19.861997,19.857362,19.850790,19.843075,19.836572]
parms1=[86.89519676343816, 86.89849352687632, 86.90179029031448, 86.99599676343816, 86.99929352687631]
parms2=[21.31073049334863, 21.307660986697257, 21.304591480045886, 21.416630493348627, 21.413560986697256]
req_elevation=[np.nan, -0.01799242 ,np.nan, -0.01757328, -0.01739314]
req_elevation = np.ma.masked_invalid(req_elevation, np.nan)
print('req_elevation_after_masking')
#output--req_value_after_masking=[-- ,-0.017992424972 ,--, -0.017573278548, -0.017393141436]
# since after masking nan converted to --
# so numpy is not accepting the -- value while doing interpolation .
class Estimation():
def __init__(self, datax, datay, dataz):
self.x = datax
self.y = datay
self.v = dataz
def estimate(self, x, y, using='ISD'):
"""
Estimate point at coordinate x,y based on the input data for this
class.
"""
if using == 'ISD':
return self._isd(x, y)
def _isd(self, x, y):
d = np.sqrt((x - self.x) ** 2 + (y - self.y) ** 2)
if d.min() > 0:
v = np.sum(self.v * (1 / d ** 2) / np.sum(1 / d ** 2))
return v
else:
return self.v[d.argmin()]
print("x1:[:5]", x1[:5])
print("y1:[:5]", y1[:5])
print("req_elevation:[:5]", req_elevation[:5])
e = Estimation(x1, y1, req_elevation)
# Below newZ is shown as error line
newZ = [e.estimate(parms1[i], parms2[i]) for i in range(len(parms1))]
File "/home/cartopy/feb20_adcirc_plot.py", line 265, in run
newZ = [e.estimate(parms1[i], parms2[i]) for i in range(len(parms1))]
File "/home/cartopy/feb20_adcirc_plot.py", line 265, in <listcomp>
newZ = [e.estimate(parms1[i], parms2[i]) for i in range(len(parms1))]
File "/home/cartopy/feb20_adcirc_plot.py", line 228, in estimate
return self._isd(x, y)
File "/home/cartopy/feb20_adcirc_plot.py", line 233, in _isd
v = np.sum(self.v * (1 / d ** 2) / np.sum(1 / d ** 2))
File "/home/cartopy/feb20_adcirc_plot.py", line 4084, in __mul__
return multiply(self, other)
File "/home/cartopy/feb20_adcirc_plot.py", line 1016, in __call__
result = self.f(da, db, *args, **kwargs)
TypeError: unsupported operand type(s) for *: 'float' and 'SingleBlockManager'**
Спасибо.