Получить маскированные массивы через соответствующие значения - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть серия наблюдений y_obs и p, взятых время от времени t. Я рассчитываю модель, чтобы она соответствовала данным, которые являются интегральной функцией от y_obs и p в dt, $ \ int f (y_obs, p) dt $. Чтобы оценить модель за пределами определенного диапазона наблюдений, я создаю x_fit = np.linspace(min(times)-10., max(times)+10, 1e4). Теперь я хочу создать корреспондента y_obs_modified и p_modified таким, чтобы у них было zero при соответствующем x_fit разе, которого нет в исходном t (скажем, разница между элементом x_fit и t на больше , чем 1), но имеют свои исходные значения для соответствующих времен (скажем, разница между элементом x_fit и t на меньше , чем 1). Как мне это сделать?

import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate as it

t=np.asarray([8418, 8422, 8424, 8426, 8428, 8430, 8540, 8542, 8650, 8654, 8656, 8658, 8660, 8662, 8664, 8666, 8668, 8670, 8672, 8674, 8768, 8770, 8772, 8774, 8776, 8778, 8780, 8782, 8784, 8786, 8788, 8790, 8792, 8794, 8883, 8884, 8886, 8888, 8890, 8890, 8892, 8894, 8896, 8898, 8904])

y_obs =np.asarray([ 0.00393986,0.00522288,0.00820794,0.01102782,0.00411525,0.00297762, 0.00463183,0.00602662,0.0114886, 0.00176694,0.01241464,0.01316199, 0.01108201, 0.01056611, 0.0107585, 0.00723887,0.0082614, 0.01239229, 0.00148118,0.00407329,0.00626722,0.01026926,0.01408419,0.02638901, 0.02284189, 0.02142943, 0.02274845, 0.01315814, 0.01155898, 0.00985705, 0.00476936,0.00130343,0.00350376,0.00463576, 0.00610933, 0.00286234, 0.00845177,0.00849791,0.0151215, 0.0151215, 0.00967625,0.00802465, 0.00291534, 0.00819779,0.00366089])

y_obs_err = np.asarray([6.12189334e-05, 6.07487598e-05, 4.66365096e-05, 4.48781264e-05, 5.55250430e-05, 6.18699105e-05, 6.35339947e-05, 6.21108524e-05, 5.55636135e-05, 7.66087180e-05, 4.34256323e-05, 3.61131000e-05, 3.30783270e-05, 2.41312040e-05, 2.85080015e-05, 2.96644612e-05, 4.58662869e-05, 5.19419065e-05, 6.00479888e-05, 6.62586953e-05, 3.64830945e-05, 2.58120956e-05, 1.83249104e-05, 1.59433858e-05, 1.33375408e-05, 1.29714326e-05, 1.26025166e-05, 1.47293107e-05, 2.17933175e-05, 2.21611713e-05, 2.42946630e-05, 3.61296843e-05, 4.23009806e-05, 7.23405476e-05, 5.59390368e-05, 4.68144974e-05, 3.44773949e-05, 2.32907036e-05, 2.23491451e-05, 2.23491451e-05, 2.92956472e-05, 3.28665479e-05, 4.41214301e-05, 4.88142073e-05, 7.19116984e-05])

p= np.asarray([ 2.82890497,3.75014266,5.89347542,7.91821558,2.95484056,2.13799544, 3.32575733,4.32724456,8.2490644, 1.26870083,8.91397925,9.45059128, 7.95712563, 7.58669608, 7.72483557,5.19766853,5.93186433,8.89793105, 1.06351782,2.92471065,4.49999613,7.37354766, 10.11275281, 18.94787684, 16.40097363, 15.38679306, 16.33387783, 9.44782842, 8.29959664,7.07757293, 3.42450524,0.93588962,2.515773,3.32857547,7.180216, 2.05522399, 6.06855409,6.1016838,10.8575614,10.8575614, 6.94775991,5.76187014, 2.09327787, 5.88619335,2.62859611])

Следование предложению ОП не приводит к желаемому результату:

print y_obs_modified # [8418.    0.    0. ...    0.    0. 8904.]
print y_obs_modified[y_obs_modified > 0] # [8418. 8904.]

1 Ответ

1 голос
/ 13 апреля 2020

Используйте np.where и np.isin .

Вам необходимо использовать его следующим образом:

y_obs_modified = np.where(np.isin(x_fit, t), x_fit, 0)
...