Интерактивный большой график с ~ 20 миллионами точек выборки и гигабайтами данных

У меня проблема (с моей оперативной памятью): она не может хранить данные, которые я хочу построить. У меня достаточно места на HD. Есть ли какое-нибудь решение, чтобы избежать этого «затенения» моего набора данных?

Конкретно я имею дело с цифровой обработкой сигналов, и мне нужно использовать высокую частоту дискретизации. Моя структура (GNU Radio) сохраняет значения (чтобы не использовать слишком много места на диске) в двоичном формате. Распаковываю. Потом мне нужно построить сюжет. Мне нужен масштабируемый и интерактивный сюжет. И это проблема.

Есть ли какой-либо потенциал оптимизации для этого или другого программного обеспечения / языка программирования (например, R или около того), который может обрабатывать большие наборы данных? На самом деле я хочу, чтобы на моих графиках было гораздо больше данных. Но у меня нет опыта работы с другим ПО. GNUplot не работает с аналогичным подходом к следующему. Я не знаю R (jet).

import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
import struct

"""
plots a cfile

cfile - IEEE single-precision (4-byte) floats, IQ pairs, binary
txt - index,in-phase,quadrature in plaintext

note: directly plotting with numpy results into shadowed functions
"""

# unpacking the cfile dataset
def unpack_set(input_filename, output_filename):
    index = 0   # index of the samples
    output_filename = open(output_filename, 'wb')

    with open(input_filename, "rb") as f:

        byte = f.read(4)    # read 1. column of the vector

        while byte != "":
        # stored Bit Values
            floati = struct.unpack('f', byte)   # write value of 1. column to a variable
            byte = f.read(4)            # read 2. column of the vector
            floatq = struct.unpack('f', byte)   # write value of 2. column to a variable
            byte = f.read(4)            # next row of the vector and read 1. column
            # delimeter format for matplotlib 
            lines = ["%d," % index, format(floati), ",",  format(floatq), "\n"]
            output_filename.writelines(lines)
            index = index + 1
    output_filename.close
    return output_filename.name

# reformats output (precision configuration here)
def format(value):
    return "%.8f" % value            

# start
def main():

    # specify path
    unpacked_file = unpack_set("test01.cfile", "test01.txt")
    # pass file reference to matplotlib
    fname = str(unpacked_file)
    plt.plotfile(fname, cols=(0,1)) # index vs. in-phase

    # optional
    # plt.axes([0, 0.5, 0, 100000]) # for 100k samples
    plt.grid(True)
    plt.title("Signal-Diagram")
    plt.xlabel("Sample")
    plt.ylabel("In-Phase")

    plt.show();

if __name__ == "__main__":
    main()

Что-то вроде plt.swap_on_disk () может кэшировать данные на моем SSD;)

66
задан Ciro Santilli 新疆改造中心法轮功六四事件 11 August 2019 в 20:27
поделиться