我正在尝试将数据从“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()
如果你能帮我弄清楚我哪里出错了,我会非常感激。
答案 0 :(得分:3)
这是一个文本文件,而不是二进制文件。 memmap
仅在数据存储为二进制时有效(即存储为数组存储在内存中)。
您可以通过逐行读取文件并将每个转换后的行存储在可写memmap
中来将文件转换为二进制文件。
答案 1 :(得分:2)
最好使用numpy.genfromtxt
或numpy.loadtxt
。例如:
datatype=[('index',numpy.int), ('floati',numpy.float32), ('floatq',numpy.float32)]
filename='data.txt'
def main():
data = numpy.genfromtxt(filename, dtype=datatype)
...