Ищет советы о том, как написать функцию (или можно рекомендовать функцию, которая уже существует), которая вычисляет разницу между всеми элементами массива, то есть реализацией diff()
, но для всех комбинаций записей в массиве не только последовательные пары.Разница между всеми 1D точками в массиве с python diff()?
Вот пример того, что я хочу:
# example array
a = [3, 2, 5, 1]
Теперь мы хотим применить функцию, которая будет возвращать разницу между всеми комбинациями записей. Теперь, учитывая, что length(a) == 4
означает, что общее количество комбинаций для N = 4; N * (N-1) * 0,5 = 6 (если длина a равна 5, то общее количество комбинаций будет равно 10 и так далее). Таким образом, функция должна возвращать следующее для вектора a
:
result = some_function(a)
print result
array([-1, 2, -2, 3, -1, -4])
Так «функция» будет похожа на pdist
но вместо вычисления расстояния Евклида, он должен просто вычислить разницу между декартова координата вдоль одной оси, например, ось z, если предположить, что элементы в a
являются координатами. Как можно заметить, мне нужен знак каждой разницы, чтобы понять, на какой стороне оси расположена каждая точка.
Спасибо.
Приветствия. Да что-то в этом роде. Но мне было интересно, есть ли функция numpy или scipy, которая делает это эффективно? Мне нужно вычислить приведенное выше для нескольких десятков тысяч строк данных, поэтому в идеале оно должно быть эффективным. – Astrid
@Astrid - векторная версия numpy будет вычислять каждое значение дважды, но в некоторых случаях она может быть еще быстрее. В принципе, вам нужен нижний треугольник 'np.subtract.outer (a, a)'. Тем не менее, ответ wim скорее всего будет быстрее во многих случаях. –
@JoeKington - Хорошо, я сделаю некоторые эксперименты и посмотрю, что я придумал. Благодарю. – Astrid