2

我正在尝试将“data.txt”中的数据放入一个 numpy 数组并用 matplotlib 绘制它。这是每行数据的样子:

“1” 11.658870417634 4.8159509459201

大约有一千万行。

我正在尝试将其放入内存映射,但不断收到此错误:

ValueError: Size of available data is not a multiple of data-type size.

这是我正在使用的代码:

import numpy
import matplotlib

matplotlib.use('Agg')
import matplotlib.pyplot as plt

datatype=[('index',numpy.int), ('floati',numpy.float32), ('floatq',numpy.float32)]
filename='data.txt'

def main():
    data = numpy.memmap(filename, datatype, 'r') 
    plt.plot(data['floati'],data['floatq'],'r,')
    plt.grid(True)
    plt.title("Signal-Diagram")
    plt.xlabel("Sample")
    plt.ylabel("In-Phase")
    plt.savefig('foo2.png')

if __name__ == "__main__":
    main()  

如果你能帮我弄清楚我哪里出错了,我将不胜感激。

4

2 回答 2

3

那是一个文本文件,而不是二进制文件。memmap仅当数据以二进制形式存储时才有效(即以数组形式存储在内存中)。

您可以通过逐行读取文件并将每个转换后的行存储在可写文件中来将文件转换为二进制文件memmap

于 2013-03-08T20:55:19.890 回答
2

你最好使用numpy.genfromtxtor numpy.loadtxt。例如:

datatype=[('index',numpy.int), ('floati',numpy.float32), ('floatq',numpy.float32)]
filename='data.txt'

def main():
    data = numpy.genfromtxt(filename, dtype=datatype) 
    ...
于 2013-03-08T21:13:45.187 回答