NUMPY TypeError: неподдерживаемые типы операндов для *: 'float' и 'SingleBlockManager' - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть некоторые данные 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'**

Спасибо.

...