Предположим, у меня есть два массива в numpy, t
и v
и предположим, что t
строго монотонно возрастает. В моем примере t
представляет собой массив точек времени и v
соответствующую скорость тела. Теперь я хочу, например, получить скорость в момент времени t = 3
. Как я могу это сделать?Получить элемент массива, который соответствует элементу другого массива в numpy
ответ
Для линейной интерполяции с использованием только NumPy, вы могли бы использовать np.interp
. Например,
import numpy as np
t = np.linspace(0, 5, 100)
v = np.sin(t)
Чтобы найти линейно интерполированное значение v
при t=3
:
In [266]: np.interp(3, t, v)
Out[266]: 0.14107783526460238
Обратите внимание, что если вы хотите интерполировать v
во многих значениях t
, вы можете передать итератор как первый аргумент до np.interp
:
In [292]: np.interp(np.linspace(t.min(), t.max(), 10), t, v)
Out[292]:
array([ 0. , 0.52741539, 0.8961922 , 0.99540796, 0.79522006,
0.35584199, -0.19056796, -0.67965796, -0.96431712, -0.95892427])
Этот i гораздо эффективнее вызова np.interp
для одного значения за раз.
Чтобы получить элемент массива, v
, что соответствует t=3
можно использовать np.searchsorted
:
In [272]: v[np.searchsorted(t, 3)]
Out[272]: 0.11106003812412972
Заметим, однако, что np.searchsorted
возвращает индекс, где 3
будет вставлен t
, чтобы сохранить его сортировку. Так v[np.searchsorted(t, 3)]
и v[np.searchsorted(t, 3)+1]
сэндвич скорость на t=3
.
Также обратите внимание, что np.searchsorted
может возвращать индекс, который на 1 больше, чем самый большой действующий индекс для t
(и v
). Это происходит, если 3 > t.max()
:
Например, если t
были [1,2,3]
:
In [277]: np.searchsorted([1,2,3], 5)
Out[277]: 3
Так для защиты от возможного IndexError, используйте np.clip
, чтобы обеспечить индекс находится между 0
и len(v)-1
:
idx = np.clip(np.searchsorted(t, 3), 0, len(v)-1)
v[idx]
Как np.interp
, np.searchsorted
может принять итерируемый (здесь, для второго аргумента)
In [306]: v[np.clip(np.searchsorted(t, [3,4,5,6]), 0, len(v)-1)]
Out[306]: array([ 0.11106004, -0.7825875 , -0.95892427, -0.95892427])
Если у вас есть SciPy есть функция, которая делает именно это:
from scipy.interpolate import interp1d
velocity = interp1d(t, v, kind="cubic")
print(velocity(3.0))
Смотрите документацию на http://docs.scipy.org/doc/scipy-0.14.0/reference/tutorial/interpolate.html
- 1. Первый элемент массива, который соответствует элементу в другом массиве
- 2. Возвращает первое значение массива, которое соответствует элементу из другого массива
- 3. Соответствует элементу внутри вложенного массива
- 4. Проверьте элемент массива, который не соответствует порядку
- 5. Заменить значения в Numpy массива значениями из другого Numpy массива
- 6. Как добавить первый элемент массива к первому элементу другого массива
- 7. Как получить элемент массива внутри другого массива?
- 8. Сумма Numpy массива на основе другого массива
- 9. Prepend элемент массива Numpy
- 10. Как получить каждый элемент массива numpy?
- 11. исключая элемент из массива Numpy
- 12. Mongo query, который соответствует полю любому элементу массива
- 13. PHP in_array не соответствует первому элементу массива
- 14. заполнение массива numpy случайным элементом из другого массива
- 15. Элемент массива как индекс для другого массива
- 16. Как установить один элемент многомерного массива Numpy с помощью другого массива Numpy?
- 17. Поиск и соответствует элементу массива с структуры
- 18. Почему LOOKUP не соответствует первому элементу массива?
- 19. Скопируйте Numpy массив в части другого массива
- 20. Как получить значение массива, который находится внутри другого массива
- 21. Добавление значения к элементу массива, который является ссылкой другого объекта
- 22. Значение в индексе массива не соответствует индексу другого массива
- 23. Сортировка массива, который зависит от другого массива
- 24. Вызов массива, который находится внутри другого массива
- 25. только один элемент в форме массива numpy
- 26. Numpy: порядок массива в качестве другого массива - строковым порядком
- 27. Суммирование данных из массива на основе другого массива в Numpy
- 28. Matplotlib: разрезание plt.imshow() соответствует разрезанию массива numpy?
- 29. Умножив каждый элемент одного массива каждым элементом другого массива
- 30. Замена значения в Numpy массива, используя в качестве индекса другого значения из того же массива