NumPy mmap:“ValueError:可用数据大小不是数据类型大小的倍数。”

2 投票
2 回答
2094 浏览
提问于 2025-04-17 18:27

我正在尝试把“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()  

如果你能帮我找出我哪里出错了,我会非常感激。

2 个回答

2

你可以使用 numpy.genfromtxtnumpy.loadtxt,这样会更好。比如说:

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

def main():
    data = numpy.genfromtxt(filename, dtype=datatype) 
    ...
3

这是一个文本文件,不是二进制文件。memmap 只有在数据以二进制形式存储时才能工作(也就是说,数据是像在内存中那样存储的数组)。

你可以通过逐行读取文件,把每一行转换成二进制,然后把这些转换后的行存储到一个可以写入的 memmap 中。

撰写回答