Я как бы новичок в Python, и мне нужно реализовать «быструю» версию этого кода.Могу ли я векторизовать этот код Python?
s="<%dH" % (int(width*height),)
z=struct.unpack(s, contents)
heights = np.zeros((height,width))
for r in range(0,height):
for c in range(0,width):
elevation=z[((width)*r)+c]
if (elevation==65535 or elevation<0 or elevation>20000):
elevation=0.0
heights[r][c]=float(elevation)
Я прочитал некоторые вопросы векторизации на python ... но я не думаю, что это относится к моему делу. Большинство вопросов такие, как использование np.sum
вместо for loops
. У меня есть два вопроса:
- Можно ли ускорить этот код ... Думаю, что «
heights[r][c]=float(elevation)
» является узким местом. Мне нужно найти некоторые команды синхронизации Python, чтобы подтвердить это. - Если возможно ускорить этот код. Какие у меня варианты? Я видел, как некоторые люди рекомендуют
cython
,pypy
,weave
. Я мог бы сделать это быстрее в C, но этот код также должен генерировать графики, поэтому я хотел бы придерживаться Python, поэтому я могу использоватьmatplotlib
.
[RunSnakeRun] (HTTP://www.vrplumber.com/programming/runsnakerun/) - отличный просмотрщик профилей Python, который показывает использование времени в формате treemap. Получите профиль, повернув 'dostuff()' в 'profile.runctx ('dostuff()', globals(), locals(), filename = 'out.profile')' –