Works perfectly (was Re: CSV methodology)

Peter Otten __peter__ at web.de
Tue Sep 23 09:59:56 CEST 2014


jayte wrote:

> On Tue, 16 Sep 2014 13:22:02 +0200, Peter Otten <__peter__ at web.de> wrote:
> 
>>jayte wrote:
>>
>>> On Mon, 15 Sep 2014 09:29:02 +0200, Peter Otten <__peter__ at web.de>
>>> wrote:
> 
> [...]
> 
>>>> but you can read raw data
>>>>with numpy. Something like
>>>>
>>>>with open(filename, "rb") as f:
>>>>    a = numpy.fromfile(f, dtype=[
>>>>        ("distance", "f16"),
>>>>        ("iterations", "i2"),
>>>>        ("zc_x", "i2"),
>>>>        ("zc_y", "i2"),
>>>>    ]).reshape(1778, 1000)
>>>>
>>>>might do, assuming "extended double" takes 16 bytes.
>>> 
>>> Will try.  Double extended precision is ten bytes, but I assume
>>> changing  the "f16" to "f10" would account for that...
>>
>>Unfortunately it seems that numpy doesn't support "f10"
> 
> Thus far, this appears to work perfectly:
> 
> with open(filename, "rb") as f:
>     a = numpy.fromfile(f, dtype=[
>         ("distance", "f8"),
>         ("iterations", "u2"),
>         ("zc_x", "u2"),
>         ("zc_y", "u2"),
>     ])
> 
> file.close(f)
> 
> d = a["distance"]
> i = a["iterations"]
> x = a["zc_x"]
> y = a["zc_y"]
> 
> (except, of course, for the loss of precision)
> 
> "reshape()" does not appear to be necessary; the various variables
> d, i, x, y return a len() of 1778000

Assuming adjacent pixels are in the same row after 

b = a.reshape(h, w).T 

you can access a pixel as

b[x, y] # without the .T (transposition) it would be b[y, x]

instead of

a[y*w + x]

and a square of 9 pixels with

b[left:left+3, top:top+3]

> Again, thank you very much,
> 
> Jeff





More information about the Python-list mailing list