1. Python 二维数组 数据类型转换
>>> a = [['1','2','5','6','8'],['4', '5', '8', '5', '8']]
>>> map(map, [float, float], a)
15: [[1.0, 2.0, 5.0, 6.0, 8.0], [4.0, 5.0, 8.0, 5.0, 8.0]]
>>> map(map, [int, int], a)
16: [[1, 2, 5, 6, 8], [4, 5, 8, 5, 8]]
2. Python多线程并行执行
利用map和multiprocessing包
from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(4) # Sets the pool size to 4 默认为电脑cpu核数
float_list = [1.0, 2.0, 3.0, 4.0]
int_list = pool.map(int, float_list)
pool.close()
pool.join()
3. 带命令行参数
if __name__ == '__main__':
PARSER = argparse.ArgumentParser(description="Parameters for the script.")
PARSER.add_argument('-d', "--diagnostics", action="store_true",
help="Compute diagnostics.")
PARSER.add_argument('-i', "--iter", type=int, default=1,
help="Number of iterations for averaging.")
PARSER.add_argument("-f", "--outputfile", default="",
PARSER.add_argument('-v', "--verbose", action="store_true",
help="Show computation steps.")
PARSER.set_defaults(argument_default=False)
CONFIG = PARSER.parse_args()
CONFIG.stack = CONFIG.stack or CONFIG.fwls
you_own_func(CONFIG)
4. 二进制文件读写
使用struct包
import struct
import numpy as np
path = 'db_pca_512.bin'
with open(path, 'rb') as f:
db_num = np.uint32(struct.unpack('I', f.read(4)) )[0]
db_fea_size = np.uint32(struct.unpack('I', f.read(4)))[0]
A = np.zeros((db_num, db_fea_size), 'float32')
for i in xrange(db_num):
print i
for j in xrange(db_fea_size):
A[i, j] = np.float32(struct.unpack('I', f.read(4)))[0]
struct.unpack()解码成python变量
a,b,c,d=struct.unpack('5s6sif',bytes)
‘5s6sif’这个叫做fmt,就是格式化字符串,由数字加字符构成,5s表示占5个字符的字符串,2i,表示2个整数等等,下面是可用的字符及类型,ctype表示可以与python中的类型一一对应。
Format | C Type | Python | 字节数 |
---|---|---|---|
x | pad byte | no value | 1 |
c | char | string of length 1 | 1 |
b | signed char | integer | 1 |
B | unsigned char | integer | 1 |
? | _Bool | bool | 1 |
h | short | integer | 2 |
H | unsigned short | integer | 2 |
i | int | integer | 4 |
I | unsigned int | integer or long | 4 |
l | long | integer | 4 |
L | unsigned long | long | 4 |
q | long long | long | 8 |
Q | unsigned long | long long | 8 |
f | float | float | 4 |
d | double | float | 8 |
s | char[] | string | 1 |
p | char[] | string | 1 |
P | void * | long |
5. range() 和 xrange()
range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序list,xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
xrange 和 range 这两个基本上都是在循环的时候用:
for i in range(0, 100):
print i
for i in xrange(0, 100):
print i
6. 使用PIL获取文件夹下所有图片,并使用tensorflow中的TFRecords序列化
TFRecords文件包含了tf.train.Example 协议内存块(protocol buffer)(协议内存块包含了字段 Features)。我们可以写一段代码获取你的数据, 将数据填入到Example协议内存块(protocol buffer),将协议内存块序列化为一个字符串, 并且通过tf.python_io.TFRecordWriter 写入到TFRecords文件。
从TFRecords文件中读取数据, 可以使用tf.TFRecordReader的tf.parse_single_example解析器。这个操作可以将Example协议内存块(protocol buffer)解析为张量。
import os
import tensorflow as tf
from PIL import Image
cwd = os.getcwd()
'''
此处加载的数据目录如下:
-- img1.jpg
img2.jpg
img3.jpg
...
-- img1.jpg
img2.jpg
...
-- ...
...
'''
writer = tf.python_io.TFRecordWriter("train.tfrecords")
for index, name in enumerate(classes):
class_path = cwd + name + "/"
for img_name in os.listdir(class_path):
img_path = class_path + img_name
img = Image.open(img_path)
img = img.resize((224, 224))
img_raw = img.tobytes() #将图片转化为原生bytes
example = tf.train.Example(features=tf.train.Features(feature={
"label": tf.train.Feature(int64_list=tf.train.Int64List(value=[index])),
'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))
}))
writer.write(example.SerializeToString()) #序列化为字符串
writer.close()