Я пытаюсь вычислить sinc(vec*dist)
над всеми попарных расстояний для каждого vec
, где vec
является 1D массив и dist
является попарные расстояния векторов строк в матрице coord
. Я использую:Быстрее способ получить умножение матриц
dist = scipy.spatial.distance.pdist(coord)
for i in range(len(vec)):
I_avr[i] = numpy.sum(numpy.sinc(vec[i]*dist))
print vec[i], I_avr[i]
Обычно coord
имеет 10^5 до 10^6 векторов и длина vec
составляет 10^3 до 10^4. Может ли кто-нибудь рекомендовать улучшения или изменения, чтобы сделать это быстрее?
Если вы можете предоставить некоторые данные примера, возможно, мы сможем помочь. Возможно, может помочь ['numpy.einsum'] (http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.einsum.html). –
Это кажется неосуществимым на одной машине. 'dist' является массивом' O (n^2) ', где' n' составляет не менее 10^5. Вероятно, он занимает не менее 5 ГБ памяти, без каких-либо ошибок. Вы подтвердили, что код даже выходит за рамки этой первой строки? –
@AlexHall: Спасибо за ваш комментарий. У меня есть ошибки памяти, вычисляющие pdist. Получение парных расстояний один за другим решает проблему памяти, но кажется неэффективным. –