2010-11-03 243 views
10

我有一個文件讀取器,它從文件中讀取n字節並返回一個代表該(二進制)數據的字符串。我想將n字節讀入一個數字的numpy數組,並對其運行FFT,但是我無法從字符串創建數組。一些例子會很棒。如何從字符串創建numpy數組?

編輯: 我在讀原始二進制數據,並因此字符串,我得到的模樣'\x01\x05\x03\xff'...。我希望這成爲[1, 5, 3, 255]

+0

該字符串的任何示例? – kennytm 2010-11-03 19:44:43

+0

您正在使用的數據結構的示例? – 2010-11-03 19:45:02

回答

20

你可以用numpy.fromstring直接做到這一點:

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

一旦完成這個,aarray([ 1, 5, 3, 255]),你可以使用常規的scipy/numpy FFT例程。

+0

有沒有辦法讓它一次讀兩個字節而不是一個? – erjiang 2010-11-04 01:37:05

+0

這很整潔 - 我不知道numpy內部的這種方法。我只是試了一下,現在將'array([1,5,3,-1],dtype = int8)'返回。任何想法可能會造成這種情況? – dtlussier 2010-11-04 15:41:35

+0

要一次讀取兩個字節而不是一個字節,可以將dtype參數更改爲「int16」,「uint16」之類的其他值 - 一旦進入多字節字符串,您可能必須按順序對輸出進行字節切換正確地獲取字節順序。只需將'a = np.fromstring(...)'替換爲'a = np.fromstring(...)。byteswap()'。 – 2010-11-04 15:55:08

1

不知道你有來什麼這是艱難的,但如果它是逗號分隔的整數,你可以做這樣的事情:

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])