Python实战经历总结-1
2017-03-20
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文件
- 读取
.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)
- 写入文件:
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')
高级特征
- 元数据 HDF5的一个很棒的特点是你可以在数据旁边存储元数据。所有的group和dataset都支持叫做属性的数据形式。属性通过attrs成员访问,类似于python中词典格式。
>>> dset.attrs['temperature'] = 99.5
>>> dset.attrs['temperature']
99.5
>>> 'temperature' in dset.attrs
True
- 滤波器组 HDF5的滤波器组能够对分块数组进行变换。最常用的变换是高保真压缩。使用一个特定的压缩滤波器创建dataset之后,读写都可以向平常一样,不必添加额外的步骤。 用关键词compression来指定压缩滤波器,而滤波器的可选参数使用关键词compression_opt来指定:
>>> dset = f.create_dataset("zipped", (100, 100), compression="gzip")
- 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编码。
平台注释:如果需要使Python程序运行在Windows以为的平台上,需要在Python文件的最前面加上如下注释说明。
#!/usr/bin/python
上述命令说明了程序用的环境的路径。