常用的一些东西

 1.numpy.random.uniform(low,high,size)

例如:numpy.random.uniform(-0.25,0.25,300)  随机的产生大小在[-0.25,0.25)之间维度为300的nparray  随机初始化词向量有论文说-0.25,0.25之间较好

2.Python内置的range()和Numpy中的arange()函数的区别

Range(5)只有一个参数则默认从0开始步长为1输出0,1,2,3,4

Range(1,5)此时从1开始步长为1输出1,2,3,4

Range(1,5,2)此时从1开始步长为2输出1,3.注意写为range(5,2)并不会代表从0开始到5步长为2,这是不对的,此外对于步长也不可设置为小数

arange()函数具备以上特性但是其步长可以设置为小数。同时它返回的是一个ndarray()所以具备reshape()属性

arange与浮点参数一起使用时,由于浮点数的精度是有限的,通常不可能预测获得的元素数量。出于这个原因,通常最好使用函数linspace,它接收我们想要的元素数量而不是步长作为参数:

np.linspace( 0, 2, 9 )# 9 numbers from 0 to 2

3.python中字典的items()

items函数,将一个字典以列表的形式返回,因为字典是无序的,所以返回的列表也是无序的。items()方法把字典中每对key和value组成一个元组,并把这些元组放在列表中返回。

4.字典的get函数

_dict.get(key,value) #若字典中不存在相应的key,则默认的key对应为value

5.argsort()函数和sort、sorted函数以及lambda创建匿名函数的用法

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。list的sort方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作

例如:对List进行排序只需_list.sort()

Sorted的语法:

sorted(iterable[, cmp[, key[, reverse]]])

参数说明:

iterable -- 可迭代对象。

cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。

key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

返回值:返回重新排序的列表

例如通过sorted对字典进行排序

import operator
_dict={'a':1,'b':3}
sorted_dict=sorted(_dict.items(),key=operator.itemgetter(1),reverse=True)

返回的sorted_dict是排序好的列表[('b', 3), ('a', 1)]

或者:

_dict = {'a': 1, 'b': 3}
sorted_dict = sorted(_dict.items(), key=lambda x:x[1], reverse=True)

argsort()函数

import numpy as np

x=np.array([1,4,3,-1,6,9])

y=x.argsort()

我们发现argsort()函数是将x中的元素从小到大排列,提取其对应的index(索引),然后输出

print(y) 则为[3,0,2,1,4,5]

6.遍历多个序列zip()的使用

同时遍历两个或更多的序列,使用zip()函数可以成对读取元素。

questions = ['name','quest','color']
answers = ['lancelot','holy','blue','blue']
for q, a in zip(questions, answers):
    print(q,a)    

输出:

name lancelot
quest holy
color blue

注意:以短列表为遍历的结束标准

a_list=['flower','flow','flight']

想对a_list中的每个元素遍历

for i in zip(*a_list):

    print(i)

输出为:

('f', 'f', 'f')

('l', 'l', 'l')

('o', 'o', 'i')

('w', 'w', 'g')

注意:以a_list中最短的元素为结束标准,zip的外层也可以加enumerate

7.numpy中的np.dot, np.multiply, *

以下说的矩阵和数组都是数据类型

np.multiply对于数组和矩阵而言都是对应的元素相乘,其中一个是矩阵一个是数组也是对应的元素相乘

*对于数组而言对应的是元素相乘,*对于矩阵而言是运行矩阵相乘(注意一个乘数是矩阵一个是数组也是矩阵相乘)

dot()不管对于两个矩阵、两个数组、还是一个矩阵一个数组而言都是运行的矩阵相乘

8.列表常用操作的时间复杂度

用的最多的切片,其时间复杂度为0(n)

 

 9.通过分层采样对数据集进行划分

train_con0,dev_con0,train_con1,dev_con1,train_label1,dev_label1=train_test_split(con_0,con_1,label,test_size=0.1,random_state=4,stratify=label)

进行分层采样:保证测试集和训练集的分布比例相同。

数据不均衡时采用此方法

10.数据打乱

from sklearn.utils import shuffle

train_df=shuffle(train_df)

11.TensorFlow设置最多保留几个检测点

saver=tf.train.Saver(max_to_keep=5)  #最多保留5个,默认就是保留5个

12.欧氏距离与余弦相似度计算相似度的区别

https://www.cnblogs.com/HuZihu/p/10178165.html

13.tf.name_scope与tf.variable_scope用法区别

具体参考:https://blog.csdn.net/daizongxue/article/details/84284007

总结:

1.`tf.variable_scope`和`tf.get_variable`必须要搭配使用(全局scope除外),为参数共享提供支持。

with tf.variable_scope('scp', reuse=True) as scp:
    a = tf.get_variable('a',shape=[1], initializer=tf.constant_initializer(1))
    print(a.name)

报错,因为reuse=True是,get_variable会强制共享,如果不存在,报错

with tf.variable_scope('scp', reuse=False) as scp:
    a = tf.get_variable('a',shape=[1], initializer=tf.constant_initializer(1))
    a = tf.get_variable('a',shape=[1], initializer=tf.constant_initializer(1))
    print(a.name)

报错,因为reuse=False时,会强制创造,如果已经存在,也会报错。

如果想实现“有则共享,无则新建”的方式,可以:

with tf.variable_scope('scp', reuse=tf.AUTO_REUSE) as scp:
    a = tf.get_variable('a',shape=[1], initializer=tf.constant_initializer(1))
    print(a.name)
    a = tf.get_variable('a',shape=[1], initializer=tf.constant_initializer(1))
    print(a.name)

输出为:

scp/a:0
scp/a:0

 

2.`tf.Variable`可以单独使用,也可以搭配`tf.name_scope`使用,给变量分类命名,模块化,这样。

3. `tf.Variable`和`tf.variable_scope`搭配使用不伦不类,不是设计者的初衷。

对于使用tf.Variable来说,tf.name_scope和tf.variable_scope功能一样,都是给变量加前缀,相当于分类管理,模块化。

4.对于tf.get_variable来说,tf.name_scope对其无效,也就是说tf认为当你使用tf.get_variable时,你只归属于tf.variable_scope来管理共享与否

with tf.name_scope('scp') as scp:
    a=tf.get_variable('a',shape=[1], initializer=tf.constant_initializer(1))
print(a.name)

输出:a:0

5.tf.variable_scope默认的reuse=False

with tf.variable_scope('scp') as scp:
    a=tf.get_variable('a',shape=[1], initializer=tf.constant_initializer(1))
print(a.name)

输出为:scp/a:0

6.直接使用tf.get_variable默认是直接创建,若存在则报错,必须结合tf.variable_scope共享

a=tf.get_variable('a',shape=[1], initializer=tf.constant_initializer(1))
print(a.name)

输出:a:0

a=tf.get_variable('a',shape=[1], initializer=tf.constant_initializer(1))
a=tf.get_variable('a',shape=[1], initializer=tf.constant_initializer(1))
print(a.name)

报错

7.tf.Variable()会自动检测有没有变量重名,如果有则会自行处理

14.collections中双向队列deque和List对比

主要是插入元素尤其是从左端不断插入元素时用双向队列更省时

因为List是连续的空间,insert的时间复杂度为O(n),双向队列是链表实现的,insert以及appendleft时间复杂度都为O(1)

# coding:utf8
import time
from collections import deque
D = deque()
L = []
def calcTime(func):
    def doCalcTime():
        sst = int(time.time() * 1000)
        func()
        eed = int(time.time() * 1000)
        print(func, 'cost time:', eed - sst, 'ms')
    return doCalcTime
@calcTime
def didDeque():
    for i in range(0, 100000):
        D.insert(0,i)
@calcTime
def didList():
    for i in range(0, 100000):
        L.insert(0,i)
if __name__ == '__main__':
    didDeque()
    print("------------")
    didList()

  

posted @ 2019-06-27 23:08  喂你在哪  阅读(218)  评论(0编辑  收藏  举报