Я дал массив из 3 строк:
import numpy as np
data = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9],
[1, 2, 3, 4, 5, 6, np.nan, np.nan, np.nan],
[4, 3, 5, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]])
print (data)
Я должен применить эту функцию для данного массива:
def simu(d):
if not np.isnan(np.sum(d)):
a = d[1:4].mean()
b = d[3:6].mean()
c = d[6:9].mean()
res = [[a,b,c]]
else:
res = 'error'
return res
Если для строки data
нет nan
, функция simu
вычисляет три значения. Если nan
присутствует в этом ряду, это приводит к error
.
1st
строка, не имеет nan
, поэтому для строки 1st
можно вычислить 3 значения без ошибки. Эти 3 значения должны использоваться для замены nan
значений в строке 2nd
. Затем вычислите simu
функцию для строки 2nd
.
Значения nan
в 3-й строке должны быть заменены вычисленными 3 значениями из 1-й и 2-й строк. Затем вычислите simu
функцию для row3.
Я пытался так:
for d in data:
d = d.reshape(-1,9)
print (d)
this_frame = data[0]
print (this_frame)
this_res = simu(this_frame)
print (this_res)
if np.isnan(np.sum(d)):
ans = np.place(d, np.isnan(d), this_res)
print (ans)
Ожидаемый результат - 9 значений из цикла for:
[[3.0, 5.0, 8.0]]
[[3.0, 5.0, 5.33]]
[[3.66, 5.33, 4.44]]
редактировать: некоторые пытаются:
results = []
currentStep = data[0]
for i in range(data.shape[0]):
pred = simu(currentStep)
results.append(pred)
results = [results, pred]
print (results)