1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| # -*- coding: utf-8 -*-
import struct
import time
import sys
is_py3k = sys.version_info.major == 3
def r1():
num = 3601*3601
sm = 0
st = time.time()
with open("test.hgt", "rb") as f:
if is_py3k:
for i in range(num):
val = f.read(2)
neg = (val[0] // 0x80)
sm += val[0] * 0x100 + val[1] - (0x10000 if neg else 0)
else:
for i in range(num):
val = f.read(2)
neg = (ord(val[0]) // 0x80)
sm += ord(val[0]) * 0x100 + ord(val[1]) - (0x10000 if neg else 0)
print("mean_z : {}".format(float(sm) / float(num)))
print("r1 time: {} sec".format(time.time()-st))
def r2():
num = 3601*3601
col = 3601
sm = 0
fmt_half = ">"+"h"*col
st = time.time()
with open("test.hgt", "rb") as f:
for i in range(col):
sm += sum(struct.unpack(fmt_half, f.read(col*2)))
print("mean_z : {}".format(float(sm) / float(num)))
print("r2 time: {} sec".format(time.time()-st))
def r3():
num = 3601*3601
sm = 0
fmt_full = ">"+"h"*num
st = time.time()
with open("test.hgt", "rb") as f:
sm = sum(struct.unpack(fmt_full, f.read(num*2)))
print("mean_z : {}".format(float(sm) / float(num)))
print("r3 time: {} sec".format(time.time()-st))
def r4():
import array
num = 3601*3601
sm = 0
st = time.time()
short_array = array.array('h') # 'h' = signed short
with open("test.hgt", 'rb') as f:
short_array.fromfile(f, num)
short_array.byteswap() # si nécessaire, inverse les octets de poids fort et de poids faible
sm = sum(short_array)
print("mean_z : {}".format(float(sm) / float(num)))
print("r4 time: {} sec".format(time.time()-st))
def r5():
import numpy
num = 3601*3601
sm = 0
st = time.time()
with open("test.hgt", 'rb') as f:
data = bytearray(f.read(num*2));
data_array_byte = numpy.array(data, dtype=numpy.int16)
high_byte = data_array_byte[::2]
low_byte = data_array_byte[1::2]
sign = 1 - ((high_byte & 0x80) / 0x80) * 2
high_byte = high_byte & 0x7f
z = sign * (high_byte * 0x100 + low_byte)
sm = z.sum()
print("mean_z : {}".format(float(sm) / float(num)))
print("r5 time: {} sec".format(time.time()-st))
def r6():
import numpy
num = 3601*3601
sm = 0
st = time.time()
with open("test.hgt", 'rb') as f:
data = bytearray(f.read(num*2));
data_array_byte = numpy.array(data, dtype=numpy.int16)
high_byte = data_array_byte[::2]
low_byte = data_array_byte[1::2]
sign = 1 - (high_byte // 0x80) * 2
high_byte = high_byte & 0x7f
z = sign * (high_byte * 0x100 + low_byte)
sm = z.sum()
print("mean_z : {}".format(float(sm) / float(num)))
print("r6 time: {} sec".format(time.time()-st))
r1()
r2()
r3()
r4()
if not is_py3k: # no numpy in my py3k
r5()
r6() |
Partager