Python科学计算——Numpy.genfromtxt

作者: Lovingmylove521 | 来源:发表于2016-09-02 15:07 被阅读7766次

    Python 并没有提供数组功能,虽然列表 (list) 可以完成基本的数组功能,但它并不是真正的数组,而且在数据量较大时,使用列表的速度就会慢的让人难受。为此,Numpy 提供了真正的数组功能,以及对数据快速处理的函数。Numpy 还是很多更高级的扩展库的依赖库,例如: ScipyMatplotlibPandas等。此外,值得一提的是:Numpy 内置函数处理数据的速度是 C 语言级别的,因此编写程序时,应尽量使用内置函数,避免出现效率瓶颈的现象。一切计算源于数据,那么我们就来看一看Numpy.genfromtxt 如何优雅的处理数据。

    官方文档

    Enthought offical tutorial: numpy.genfromtxt

    A very common file format for data file is comma-separated values (CSV), or related formats such as TSV (tab-separated values). To read data from such files into Numpy arrays we can use the numpy.genfromtxt function.

    案例说明

    我们以数字示波器采集的实验产生的三角波 (triangular waveform) 为例,它是包含数据信息的表头,以 .txt 格式存储的文本文件。

    Type:          raw
    Points:        16200
    Count:         1
    ...
    X Units:       second
    Y Units:       Volt
    XY Data:
    2.4000000E-008, 1.4349E-002
    2.4000123E-008, 1.6005E-002
    2.4000247E-008, 1.5455E-002
    2.4000370E-008, 1.5702E-002
    2.4000494E-008, 1.5147E-002
    ...
    

    之前,在Python科学计算——File I/O中提到了两种方法读取上述的数据,它们共同点是将数据存储在列表中,正如开头所说,列表在处理大量数据时是非常缓慢的。那么,我们就来看一看 numpy.genfromtxt 如何大显身手。

    代码示例

    为了得到我们需要的有用数据,我们有两个硬的要求: (1) 跳过表头信息;(2) 区分横纵坐标

    import numpy as np
    data = np.genfromtxt('waveform.txt',delimiter=',',skip_header=18)
    

    **delimiter: the str used to separate data. 横纵坐标以 ',' 分割,因此给 delimiter 传入 ','。skip_header: ** the number of lines to skip at the beginning of the file. 有用数据是从19行开始的,因此给 skip_header 传入 18。

    print data[0:3,0], data[0:3,1]
    

    因为读入的是二维数据,因此利用 numpy 二维数据的切片方式 (Index slicing) 输出各自的前三个数据验证是否读取正确:

    [  2.40000000e-08   2.40001230e-08   2.40002470e-08]
    [ 0.014349  0.016005  0.015455]
    

    对数据进行归一化处理后,调用 Matplotlib 画图命令,就可得到图像如下:

    import matplotlib.pyplot as plt
    fig, axes = plt.subplots(figsize=(8,6))
    axes.plot(x, y, 'r', linewidth=3)
    axes.set_xlabel('Time(ps)')
    axes.set_ylabel('Amplitude[a.u.]')
    fig.savefig("triangular.png", dpi=600)
    
    triangular waveform

    补充

    numpy.genformtxt( ) 函数提供了众多的入参,实现不同格式数据的读取,详情可参考:numpy.genfromtxt
    此外,numpy 中还提供了将数据存储为 CSV 格式的函数 numpy.savetxt( ),详情可参考:numpy.savetxt

    Stay hungry, Stay foolish. -- Steve Jobs

    相关文章

      网友评论

        本文标题:Python科学计算——Numpy.genfromtxt

        本文链接:https://www.haomeiwen.com/subject/uunhettx.html