У меня есть куча точек с форматом point = [time, latitude, longitude]
.Выберите все смежные элементы без копирования массива numpy
Итак, я получил себе Numpy массив, который выглядит примерно так -
points = numpy.array([
[t_0, lat_0, lon_0],
[t_1, lat_1, lon_1],
[t_2, lat_2, lon_2],
...
[t_n, lat_n, lon_n],
])
Теперь мне нужно сделать что-то, что дает мне следующий и предыдущие пункты для каждой из этих точек, как:
next_points = numpy.array([
[t_1, lat_1, lon_1],
[t_2, lat_2, lon_2],
...
[t_n, lat_n, lon_n],
[nan, nan, nan], # Note how `nan` is put where next does not exist
])
prev_points = numpy.array([
[nan, nan, nan],
[t_0, lat_0, lon_0],
[t_1, lat_1, lon_1],
[t_2, lat_2, lon_2],
...
])
Итак, что я могу применить свои функции расстояния -
next_distances = distance_function(points, next_points)
prev_distances = distance_function(points, prev_points)
Теперь эта задача появится s в функции, которая вызывается в цикле около 1000 раз,
Было бы хорошо, если бы я мог получить next_points
и prev_points
без создания копии points
.
Есть ли способ сделать это?
Похоже, вы вычисляете одинаковые расстояния дважды, предполагая, что ваша дистанционная функция является коммутативной, то есть 'dist (a, b) == dist (b, a)'. –
Да, но это не имеет значения, потому что 'distance_function', только вычисляет расстояние для уникальных пар, которые еще не находятся в кеше, и кэширует расстояния для более позднего ... так что это не должно быть проблемой .... – Optimus
Если вы «Повторяя массивы точек внутри дистанционной функции, вы можете использовать« itertools.chain » –