Luozm +

Python实战经历总结-1

TF/Keras学习中遇到的Python技巧总结

原创文章,转载请注明:转自Luozm's Blog

本文记录一个几乎没用过Python的初学者强行上手TensorFlow的头疼经历。

1. 数据读写

1.1 Scipy.io

读取mat文件

由于我的数据集是.mat格式,需要首先导入才能进行处理。

在Python中可以使用 scipy.io 中的函数loadmat()读取mat文件,函数savemat()保存文件。

import scipy.io as scio
dataFile = 'E://data.mat'
data = scio.loadmat(dataFile)

注意,读取出来的data是字典格式,里面的数据矩阵是Numpy矩阵格式。

可以通过type()函数查看:

print type(data)
print type(data['A'])

结果显示:

<type 'dict'>
<type 'numpy.ndarray'>

保存mat文件

将这里的data[‘A’]矩阵重新保存到一个新的文件dataNew.mat中:

dataNew = 'E://dataNew.mat'
scio.savemat(dataNew, {'A':data['A']})

注意:是以字典的形式保存。

1.2 h5py

参考自

一个HDF5文件是一种存放两类对象的容器:dataset和group. Dataset是类似于数组的数据集,而group是类似文件夹一样的容器,存放dataset和其他group。在使用h5py的时候需要牢记一句话:groups类比词典,dataset类比Numpy中的数组。 HDF5的dataset虽然与Numpy的数组在接口上很相近,但是支持更多对外透明的存储特征,如数据压缩,误差检测,分块传输。

读取和保存HDF5文件

  1. 读取.h5文件:
import h5py

# 只读方式打开文件
with h5py.File(file_name, 'r') as file:
    # 读入文件中的数组
    images = file['images'][:]
    labels = file['labels'][:]

请记住h5py.File类似Python的词典对象,因此我们可以查看所有的键值:

>>> file.keys()
[u'mydataset']

Dset是一个HDF5的dataset对象,我们可以像Numpy的数组一样访问它的属性和数据。

>>> dset.shape
(100,)
>>> dset.dtype
dtype('int32')
>>> dset[...] = np.arange(100)
  1. 写入文件:
    import h5py
    with h5py.File(file_name, 'w') as file:
     file.create_dataset('test_patch', data=TEST_PATCH, compression='gzip')
     file.create_dataset('test_labels', data=TEST_LABELS, compression='gzip', dtype='i8')
    

高级特征

  1. 元数据 HDF5的一个很棒的特点是你可以在数据旁边存储元数据。所有的group和dataset都支持叫做属性的数据形式。属性通过attrs成员访问,类似于python中词典格式。
>>> dset.attrs['temperature'] = 99.5
>>> dset.attrs['temperature']
99.5
>>> 'temperature' in dset.attrs
True
  1. 滤波器组 HDF5的滤波器组能够对分块数组进行变换。最常用的变换是高保真压缩。使用一个特定的压缩滤波器创建dataset之后,读写都可以向平常一样,不必添加额外的步骤。 用关键词compression来指定压缩滤波器,而滤波器的可选参数使用关键词compression_opt来指定:
>>> dset = f.create_dataset("zipped", (100, 100), compression="gzip")
  1. HDF5文件的限制
    • HDF5文件本身大小没有限制,但是HDF5的一个dataset最高允许32个维,每个维度最多可有2^64个值,每个值大小理论上可以任意大
    • 目前一个chunk允许的最大容量为2^32-1 byte (4GB). 大小固定的dataset的块的大小不能超过dataset的大小。

2. 注释

参考自

Python单行注释以#开头,单行注释可以作为单独的一行放在被注释的代码行之上,也可以放在语句或者表达式之后。

#Give you a chance to let you know me
print("Give you a chance to let you know me")
say_what = "this is a demo" #at the end of a line

Python 中多行注释使用三个单引号(‘’‘)或三个双引号(“””),而实际上这个是多行字符串的书写方式,并不是Python本身提倡的多行注释。

# 文件名:test.py
'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
'''
"""
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""

Python中还有一些特殊注释以完成一些特别的功能,例如:编码注释、平台注释。 编码注释:

# -*- coding: UTF-8 -*-
print ("你好,Python");

从Python3开始,Python默认使用UTF-8编码,所以Python3.x的源文件不需要特殊声明UTF-8编码。

参见:Source File Encoding

平台注释:如果需要使Python程序运行在Windows以为的平台上,需要在Python文件的最前面加上如下注释说明。

#!/usr/bin/python

上述命令说明了程序用的环境的路径。

© Luozm . All rights reserved. | Top

Life

Theory

Develop