2010-11-03 26 views
10

Bir dosyadan n bayt okur ve bu (ikili) verileri temsil eden bir karakter dizisi döndüren bir dosya okuyucum var. Ben n byte'ları numpy bir dizi dizisine okumak ve bir FFT üzerinde çalıştırmak istiyorum, ancak bir diziden bir dizi oluşturma konusunda sorun yaşıyorum. Örnek birkaç satır harika olurdu.Dizeden numpy dizisi nasıl oluşturulur?

Düzenleme: çiğ ikili veri okuyorum ve böylece dize ben '\x01\x05\x03\xff'... gibi görünüyor olsun. Bunun [1, 5, 3, 255] olmasını istiyorum. Böyle

+0

Bu dizenin herhangi bir örneği? – kennytm

+0

Birlikte çalıştığınız veri yapısı örneği? –

cevap

20

Sen numpy.fromstring ile doğrudan bunu yapabilirsiniz:

import numpy as np 
s = '\x01\x05\x03\xff' 
a = np.fromstring(s, dtype='uint8') 

Bunu tamamladıktan sonra, aarray([ 1, 5, 3, 255]) ve normal scipy/numpy FFT rutinlerini kullanabilirsiniz.

+0

Bir kerede iki bayt okuması için bir yol var mı? – erjiang

+0

Bu temiz - Bu yöntemi numpy içinde bilmiyordum. Ben sadece bir denedim ve diziyi alıyorum ([1, 5, 3, -1], dtype = int8) 'yerine geri. Buna neden olabilecek bir fikrin var mı? – dtlussier

+0

Birer birer yerine bir defada iki bayt okumak için, dtype argümanını 'int16',' uint16' gibi başka bir şeye dönüştürebilirsiniz. Birden çok baytlık dizelere girdiğinizde, çıkış sırasına göre byteswap vermeniz gerekebilir. Bayt siparişini doğru şekilde almak için Sadece a = np.fromstring (...) 'yerine a = np.fromstring (...). Byteswap()' yazın. –

1
zor olduğunu size gelecek olan kadarıyla bilmeden

ama tamsayılar virgülle olsaydı yapabileceği bir şey:

myInts = map(int, myString.split(',')) 
5
>>> '\x01\x05\x03\xff' 
'\x01\x05\x03\xff' 
>>> map(ord, '\x01\x05\x03\xff') 
[1, 5, 3, 255] 
>>> numpy.array(map(ord, '\x01\x05\x03\xff')) 
array([ 1, 5, 3, 255]) 
İlgili konular