Pythonの場合:lon、lat(500 000ポイント以上)の2つの配列があります。
lon = numpy.array()
lat = numpy.array()
flag = True
while flag:
lon1 = lon[:-1]
lon2 = lon[1:]
lat1 = lat[:-1]
lat2 = lat[1:]
'''distance'''
x = (lon2 - lon1)
y = (lat2 - lat1)
d = numpy.sqrt(x * x + y * y)
min = numpy.min(d)
if min < 0.015:
j = numpy.where(d == min)[0][0]
lon[j] = (lon[j] + lon[j + 1]) / 2
lat[j] = (lat[j] + lat[j + 1]) / 2
lon = numpy.delete(lon, j + 1)
lat = numpy.delete(lat, j + 1)
else:
flag = False
このコードは非常にゆっくりと動作します!
プロンプトを表示してください、コードをより速く実行するにはどうすればよいですか?
scipy.weaveがあることは知っています。プロンプトを表示してください、scipy.weaveを使用してコードを変更する方法は?
import scipy from scipy import weave codeC = """ ??? """ scipy.weave.inline(codeC, ['lon', 'lat'], compiler='gcc')
ありがとう。
アップデート:
lon1 = lon[:-1]
lon2 = lon[1:]
lat1 = lat[:-1]
lat2 = lat[1:]
x = (lon2 - lon1)
y = (lat2 - lat1)
d = x * x + y * y
while True and d.size > 1:
j = np.argmin(d)
if d[j] > min_radius:
break
lon[j] = (lon[j] + lon[j + 1]) / 2
lat[j] = (lat[j] + lat[j + 1]) / 2
'''lon = np.delete(lon, j + 1)
lat = np.delete(lat, j + 1)
d = np.delete(d, j)'''
if j == (d.size - 1):
lon = lon[:j + 1]
lat = lat[:j + 1]
d = d[:j]
else:
lon = np.hstack((lon[:j + 1], lon[j + 2:]))
lat = np.hstack((lat[:j + 1], lat[j + 2:]))
d = np.hstack((d[:j], d[j + 1:]))
if j > 0:
x = lon[j] - lon[j - 1]
y = lat[j] - lat[j - 1]
d[j - 1] = x * x + y * y
if j < (d.size - 1):
x = lon[j + 1] - lon[j]
y = lat[j + 1] - lat[j]
d[j] = x * x + y * y
@ ilmiacs、@ Jaime、@ Luke、ありがとう!それははるかに速く動作します!
しかし、全体として、コードは500ポイントの配列で非常に長く機能します...:(((