python基础技巧(一)

  1. 字符串转化为jsondict
#eval()——多层使用就不行了
a='{"a":{"b1":1,"b2":2}}'
eval(b)
#常用方式 json.loads(str)
import json
print( json.loads(str))
#正则中,|前后是两部分,选择时,需要加入(?: A | B)
s = 'I have a dog , I have a cat'
re.findall( r'I have a (?:dog|cat)' , s )

**‘|’ **或规则

将两个规则并列起来,以‘|’连接,表示只要满足其中之一就可以匹配。比如

[a-zA-Z]|[0-9] 表示满足数字或字母就可以匹配,这个规则等价于 [a-zA-Z0-9]

注意:关于’|’要注意两点:

第一, 它在’[‘ ‘]’之中不再表示或,而表示他本身的字符。如果要在’[‘ ‘]’外面表示一个’|’字符,必须用反斜杠引导,即 ’/|’ ;

第二, 它的有效范围是它两边的整条规则,比如‘dog|cat’匹配的是‘dog’和’cat’,而不是’g’和’c’。如果想限定它的有效范围,必需使用一个无捕获组 ‘(?: )’包起来。比如要匹配 ‘I have a dog’或’I have a cat’,需要写成r’I have a (?:dog|cat)’ ,而不能写成 r’I have a dog|cat’

>>> s = ‘I have a dog , I have a cat’

>>> re.findall( r’I have a (?:dog|cat)’ , s )

[‘I have a dog’, ‘I have a cat’] #正如我们所要的

下面再看看不用无捕获组会是什么后果:

>>> re.findall( r’I have a dog|cat’ , s )

[‘I have a dog’, ‘cat’] #它将’I have a dog’ 和’cat’当成两个规则了

至于无捕获组的使用,后面将仔细说明。这里先跳过。

http://www.cnblogs.com/lzw121/p/6306698.html

pd.DataFrame 更改元素值时:

import numpy as np
df=pd.DataFrame(np.arange(12).reshape(4,3).astype(str),columns=['A','B','C'])
df['A'][1]=1

print(type(df['A'][1])#/int
#有时出现无法赋值的情况,推荐用以下方式赋值loc
df.loc[1,'A']=1
#print(type(df.loc[1,'A']))

安装basemap

$ wget https://github.com/matplotlib/basemap/archive/v1.1.0.tar.gz
$ tar zxf v1.1.0.tar.gz
$ cd basemap-1.1.0/

$ cd geos-3.3.3  # 安装 GEOS
$ sudo mkdir /opt/geos && sudo chown -R $USER /opt/geos
$ export GEOS_DIR=/opt/geos
$ ./configure --prefix=$GEOS_DIR
$ make && make install
#安装时如果提醒没有pyproj需要安装
$ conda install pyproj 
或者 
$pip install pyproj
$ cd ..
$ python setup.py install  # 安装 basemap
#验证 无报错即成功
$ python -c 'from mpl_toolkits.basemap import Basemap' 
f, ax1 = plt.subplots()
plt.figure() # Create a new figure

y = df['MEDV']

for i in range (1,8):
    number = 420 + i
    ax1.locator_params(nbins=3)#设定坐标轴被分为几分,也可以指定坐标被分为几分
    ax1 = plt.subplot(number)#自动拆解为(4,2,i)即,总共有4x2个图表,第i个图画图,
    plt.title(list(df)[i])
    ax1.scatter(df[df.columns[i]],y) #Plot a scatter draw of the  datapoints
plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)#设置每个子图之间的上下左右之间的间隔,

shuffle() 方法将序列的所有元素随机排序。

pandas.shuffle()
from sklearn.utils import shuffle

tf.scalar_summary   =>tf.summary.scalar 将一个纯数转化为一个张量,一维的张量,在TensorBound上显示
'''
scalar(name,tensor,collections=None,family=None)

函数参数
name:生成节点的名字,也会作为TensorBoard中的系列的名字。
tensor:包含一个值的实数Tensor。
collection:图的集合键值的可选列表。新的求和op被添加到这个集合中。缺省为[GraphKeys.SUMMARIES]
family:可选项;设置时用作求和标签名称的前缀,这影响着TensorBoard所显示的标签名。
函数简介
返回值:一个字符串类型的标量张量,包含一个Summaryprotobuf
返回错误:ValueErrortensor有错误的类型或shape。
函数求出的Summary中有一个包含输入tensor的Tensor.proto
'''
tf.train.SummaryWriter => tf.summary.FileWriter 
'''
tf.summary.merge_all

merge_all 可以将所有summary全部保存到磁盘,以便tensorboard显示。如果没有特殊要求,一般用这一句就可一显示训练时的各种信息了。


'''
 tf.train.SummaryWriter => tf.summary.FileWriter
'''
tf.summary.FileWriter

指定一个文件用来保存图。

格式:tf.summary.FileWritter(path,sess.graph)

可以调用其add_summary()方法将训练过程数据保存在filewriter指定的文件中

ummary_waiter = tf.summary.FileWriter("log",tf.get_default_graph())
log是事件文件所在的目录,这里是工程目录下的log目录。第二个参数是事件文件要记录的图,也就是tensorflow默认的图。
'''
tf.initialize_all_variables()  ==>  tf.global_variables_initializer()

https://blog.youkuaiyun.com/shenxiaolu1984/article/details/52815641

将summary和varible讲的比较深入!!

#tf.slice(points.initialized_value(), [0,0], [K,2]
'''
从points的[0,0]为起点,各维度截取K,2个值,即axis=0上截取0——k+0维,在axis=1上截取0——2+0维度
'''
#tf.tile(centroids, [N, 1])
'''
对centroids的axis=0上复制N次,在axis=1上复制一次组成一个张量,axis的长度不变,只相应的变各axis的维度。
'''
#tf.reduce_sum(tf.square(rep_points - rep_centroids), reduction_indices=2)
'''
tf.square(rep_points - rep_centroids):表示各元素取平方值
tf.reduce_sum(a,reduction_indices=2):表示在axis=2上进行sum

'''
#tf.argmin(sum_squares, 1)
'''
在axis=1上寻找相应的最小值索引
'''
#tf.not_equal(best_centroids, cluster_assignments)
'''
对应元素是否相同
'''
#tf.reduce_any(tf.not_equal(best_centroids, cluster_assignments))
'''
x = tf.constant([[True,  True], [False, False]])
tf.reduce_any(x)  # True
tf.reduce_any(x, 0)  # [True, True]
tf.reduce_any(x, 1)  # [True, False]
'''
#tf.unsorted_segment_sum(points, best_centroids, K)
'''
https://blog.youkuaiyun.com/guotong1988/article/details/77622790
按照best_centroids对应的分片,后对应元素进行相加,其中best_centroids 即为对应分片值,
K为其best_centroids的取值范围[0,K),即最后剩余的分片维度
'''
#
  • glob

    通配符,用来模糊匹配路径下的文件及子文件数据:

    通配符是一些特殊符号,主要有星号()和问号(?),用来模糊搜索文件,“”可以匹配任意个数个符号, “?”可以匹配单个字符。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者需要匹配符合一定条件的多个目标文件时,可以使用通配符代替一个或多个真正的字符。

    https://blog.youkuaiyun.com/dcrmg/article/details/78309469

    glob(pathname, recursive=False)
    第一个参数pathname为需要匹配的字符串。(该参数应尽量加上r前缀,以免发生不必要的错误)
    第二个参数代表递归调用,与特殊通配符“**”一同使用,默认为False。
    该函数返回一个符合条件的路径的字符串列表,如果使用的是Windows系统,路径上的“\”符号会自动加上转义符号变为“\”。

    iglob(pathname, recursive=False)
    参数与glob()一致。
    返回一个迭代器,该迭代器不会同时保存所有匹配到的路径,而是逐个获取匹配的文件路径名,遍历该迭代器的结果与使用相同参数调用glob()的返回结果一致。

    通配符功能
    *匹配0或多个字符
    **匹配所有文件、目录、子目录和子目录里的文件(3.5版本新增)
    ?匹配1个字符,与正则表达式里的?不同
    [exp]匹配指定范围内的字符,如:[1-9]匹配1至9范围内的字符
    [!exp]匹配不在指定范围内的字符
    import glob
    glob.glob('./**')
    
  • numpy读存储文件

    https://www.cnblogs.com/sunshinewang/p/8892330.html

    • 一维或二维文件

    np.savetext()——.gz,.bz2文件

    np.loadtxt()——.gz,.bz2文件

    np.savetxt() np.loadtxt()只能有效存取一维和二维数组。

    • 多维文件
    a.tofile(frame, sep='', format='%s')
    
    • frame : 文件、字符串
    • sep : 数据分割字符串,如果是空串,写入文件为二进制。即,默认为空串。
    • format : 写入数据的格式
    np.fromfile(frame, dtype=float, count=‐1, sep='')
    
    • frame : 文件、字符串
    • dtype : 读取的数据类型 。可以发现,我们读取数据的时候都需要指定数据类型,无论是不是一维二维。默认为浮点型
    • count : 读入元素个数, ‐1表示读入整个文件
    • sep : 数据分割字符串,如果是空串,写入文件为二进制

    如果不指定分隔符,则读取也不需要指定,此时存储的是二进制文件。

    np.save(fname, array) 或 np.savez(fname, array)
    
    • fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
    • array : 数组变量
    np.load(fname)
    
    • fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
  • ravel()——flatten()——flat()

    .ravel()——返回一个视图,即创建一个指针而已,对其修改即为对原始数据的修改。

    .flatten()——返回一个拷贝,对其修改不影响之前的数据。

    .flat——同ravel()

    两者的区别在于返回拷贝(copy)还是返回视图(view),numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始矩阵,而numpy.ravel()返回的是视图(view,也颇有几分C/C++引用reference的意味),会影响(reflects)原始矩阵。

    **将array转化为一个迭代器

x = np.array([[1, 2], [3, 4]])
y1=x.ravel()#创建指针索引
y2=x.flatten()#拷贝一份

>>> x
array([[1, 2],
       [3, 4]])
>>> x.flatten()
array([1, 2, 3, 4])
>>> x.ravel()
array([1, 2, 3, 4])
>>> x.flat[:]#区别
array([1, 2, 3, 4])
#两者默认均是行序优先
>>> x.flatten('F')
array([1, 3, 2, 4])
>>> x.ravel('F')
array([1, 3, 2, 4])

flatten(order=’*’)

可选参数,order:{‘C’,‘F’,‘A’,‘K’}

  • ‘C’:C-style,行序优先
  • ‘F’:Fortran-style,列序优先
  • ‘A’:if a is Fortran contiguous in memory ,flatten in column_major order
  • ‘K’:按照元素在内存出现的顺序进行排序
    默认为’C’

https://blog.youkuaiyun.com/bubble_story/article/details/79531495

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值