我有一個文件讀取器,它從文件中讀取n字節並返回一個代表該(二進制)數據的字符串。我想將n字節讀入一個數字的numpy數組,並對其運行FFT,但是我無法從字符串創建數組。一些例子會很棒。如何從字符串創建numpy數組?
編輯: 我在讀原始二進制數據,並因此字符串,我得到的模樣'\x01\x05\x03\xff'...
。我希望這成爲[1, 5, 3, 255]
。
我有一個文件讀取器,它從文件中讀取n字節並返回一個代表該(二進制)數據的字符串。我想將n字節讀入一個數字的numpy數組,並對其運行FFT,但是我無法從字符串創建數組。一些例子會很棒。如何從字符串創建numpy數組?
編輯: 我在讀原始二進制數據,並因此字符串,我得到的模樣'\x01\x05\x03\xff'...
。我希望這成爲[1, 5, 3, 255]
。
你可以用numpy.fromstring
直接做到這一點:
import numpy as np
s = '\x01\x05\x03\xff'
a = np.fromstring(s, dtype='uint8')
一旦完成這個,a
是array([ 1, 5, 3, 255])
,你可以使用常規的scipy/numpy FFT例程。
有沒有辦法讓它一次讀兩個字節而不是一個? – erjiang 2010-11-04 01:37:05
這很整潔 - 我不知道numpy內部的這種方法。我只是試了一下,現在將'array([1,5,3,-1],dtype = int8)'返回。任何想法可能會造成這種情況? – dtlussier 2010-11-04 15:41:35
要一次讀取兩個字節而不是一個字節,可以將dtype參數更改爲「int16」,「uint16」之類的其他值 - 一旦進入多字節字符串,您可能必須按順序對輸出進行字節切換正確地獲取字節順序。只需將'a = np.fromstring(...)'替換爲'a = np.fromstring(...)。byteswap()'。 – 2010-11-04 15:55:08
不知道你有來什麼這是艱難的,但如果它是逗號分隔的整數,你可以做這樣的事情:
myInts = map(int, myString.split(','))
>>> '\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])
該字符串的任何示例? – kennytm 2010-11-03 19:44:43
您正在使用的數據結構的示例? – 2010-11-03 19:45:02