美文网首页
python知识点汇总

python知识点汇总

作者: 裁尘的人儿 | 来源:发表于2020-04-01 09:57 被阅读0次
    1. 按行名和列名取出行列
    data.loc['rowname',:]
    data.loc[:,'colname']
    
    1. 按行索引和列索引取出行列:
    data.iloc[3,:]
    data.iloc[:,3]
    

    同时取出array的某几行某几列数据

    #取出1,2行数据
    C_A = c[[0,2]]  #必须先取出想要的行数据,再取出想要的列数据
    #取出3、4列数据
    C_A = C_A[:,[2,3]]
    #注意:不能同时取
    
    1. 计算列表里各元素出现的次数:
    y=[1,2,3,4,22,1,1,1,3,4]
     pd.Series(y).value_counts()
    

    或者:计算列表中从0开始每个数的出现的次数
    np.bincount(y)

    4.给dataframe命名列名(只赋第三列)

    a.columns=[None,None,"type",None]
    
    
    #非常重要:只修改某个特定列名!!!!
    df.rename(columns={'a':'A'})
    
    #修改全部列名
    df.columns = ['A','B']
    
    
    

    4.1 调整列的顺序

    #调整列的顺序
    #方式一:
    columns_order = ['date', 'time', 'open', 'high', 'low', 'close', 'volumefrom', 'volumeto']
    df = df[columns_order]或df=pd.DataFrame(df, columns=columns_order )
    #方式二:
    #意思是,先把需要调整的列的数据拿出来,之后,再将这个列删掉,最后,再用插入的方式把这个列调整到对应的位置上。
    df_id = df.id
    df = df.drop('id',axis=1)
    df.insert(0,'id',df_id)
    
    1. 关于路径操作:
    获得当前工作目录:os.getcwd()
    新建目录:os.mkdir()
    切换工作路径:os.chdir()
    路径粘贴:os.path.join()可以有n多个参数
    
    1. 字符串分割,截取,拼接,部分替换,字符串与int直接转换
    #字符串拼接:
     "{0}.png".format("kghf")     #结果为:"kghf.png"
     "aaa" + "bbb"
    
    # 字符串截取:
    "kghfdfgsf.tiff"[:-6]   #截去/删除后六个字符
    
    #字符串分割:
    "kghfdfgsf.tiff".split(".")
    
    #字符串部分替换:
    #如果只需要将一个字符串里的某一部分替换掉,可以用a.replace(要替换掉的部分字符串,要替换进来的字符串):
    label_path =  os.path.join(label_dir, img.replace('fullstack', 'cellmask'))
    

    6.1 将列表中的字符串转为数字

    #字符转整数:
    int("2")
    #整数转字符:
    str(2)
    
    
    numbers = [ int(x) for x in numbers ]
    
    #Python2,可以使用map函数  
    numbers = map(int, numbers)
    
    #如果是3.x,map返回的是map对象,当然也可以转换为List:
    numbers = list(map(int, numbers)
    
    
    

    6.1 关于format:

    '数字{1}{2}和{0}'.format("123",456,'789')
    #'数字456789和123'
    

    7.画图:

    #方式一:
    #注意:plt.cm.gray和cmap='gray'等同
    fig,[(ax0, ax1, ax2),(ax3, ax4, ax5)]= plt.subplots(2, 3, figsize=(4*3, 4*2))
    
    ax0.imshow(label[:,:,0], plt.cm.gray, interpolation='nearest')
    ax0.axis('off')
    
    ax1.imshow(label[:,:,1], plt.cm.gray, interpolation='nearest')
    ax1.axis('off')
    
    ax2.imshow(label[:,:,2], plt.cm.gray, interpolation='nearest')
    ax2.axis('off')
    
    ax3.imshow(label[:,:,3], plt.cm.gray, interpolation='nearest')
    ax3.axis('off')
    
    ax4.imshow(label[:,:,4], plt.cm.gray, interpolation='nearest')
    ax4.axis('off')
    
    ax5.imshow(label[:,:,5], plt.cm.gray, interpolation='nearest')
    ##cmap='gray'或plt.cm.gray
    ax5.axis('off')
    fig.tight_layout()
    
    #方式二:
    import matplotlib.pyplot as plt
    plt.imshow(label[:,:,5], cmap='gray', interpolation='nearest')
    
    #方式三:在一张图片上又继续画图
    fig, ax = plt.subplots()
    ax.imshow(image, cmap=plt.cm.gray)
    
    for props in regions:
        y0, x0 = props.centroid
        orientation = props.orientation
        x1 = x0 + math.cos(orientation) * 0.5 * props.minor_axis_length
        y1 = y0 - math.sin(orientation) * 0.5 * props.minor_axis_length
        x2 = x0 - math.sin(orientation) * 0.5 * props.major_axis_length
        y2 = y0 - math.cos(orientation) * 0.5 * props.major_axis_length
    
        ax.plot((x0, x1), (y0, y1), '-r', linewidth=2.5)
        ax.plot((x0, x2), (y0, y2), '-r', linewidth=2.5)
        ax.plot(x0, y0, '.g', markersize=15)
    
        minr, minc, maxr, maxc = props.bbox
        bx = (minc, maxc, maxc, minc, minc)
        by = (minr, minr, maxr, maxr, minr)
        ax.plot(bx, by, '-b', linewidth=2.5)
    
    ax.axis((0, 600, 600, 0))
    plt.show()
    
    #方式四:循环画图
    import matplotlib.pyplot as plt
    %matplotlib inline
    nrows = 3
    ncols = 3
    figsize = (8, 8)
    _, figs = plt.subplots(nrows, ncols, figsize=figsize)
    for i in range(nrows):
        for j in range(ncols):
            figs[i][j].imshow(im_aug(im))
            figs[i][j].axes.get_xaxis().set_visible(False)
            figs[i][j].axes.get_yaxis().set_visible(False)
    plt.show()
    
    

    8.去重/排序:

    去重:np.unique()
    排序:np.sort()
    

    9.根据矩阵里不同的标记/数字,给矩阵图片显示不同的颜色

    from skimage import measure,color
    dst=color.label2rgb(labels2cluster)  #根据不同的标记显示不同的颜色
    
    #开图fig,开轴ax
    fig,ax= plt.subplots(1, 1, figsize=(4*1, 4*1))
    ax.imshow(dst,interpolation='nearest')
    ax.axis('off')
    fig.tight_layout()
    
    1. 矩阵逻辑操作:可以赋值,但是不能赋值给其他变量,因为逻辑操作后得到的不是矩阵,而是从中取出满足条件的一个数组
    a[a>10]=1
    a[a<=10]=0
    

    注意:b=a[a>10]结果是一个数组,取出矩阵a中大于10的所有数

    1. mask提取ROI:
    imasked = cv2.add(raw_img, np.zeros(np.shape(raw_img), dtype=np.float32), mask=imask.astype(np.uint8))
    #注意:
    #1. mask必须是np.uint8
    #2. 前两个参数必须数据类型一致
    
    1. 连通区域标记:使用label和mask均可
    1. 调整图片尺寸,不改变图片内容的方法: skimage.transform里的resize函数
    a=tiff.imread("test/crop_self_testunet34_mask/crop_MB0002_1_345_cellmask.tiff").astype(np.uint8)
    img_size_target=512
    from skimage.transform import resize
    a0=resize(a, (22,img_size_target, img_size_target), mode='constant', preserve_range=True)
    

    来自:https://blog.csdn.net/Fredric_2014/article/details/83240107

    1. 给mask里每个不同数字的object加颜色:

    import numpy as np
    import scipy.ndimage as ndi
    from skimage import measure,color
    import matplotlib.pyplot as plt
    
    img=tiff.imread("....celltype.tiff").astype(np.uint8)
    dst = color.label2rgb(img)
    plt.imshow(dst,cmap='gray',interpolation='nearest')
    plt.show()
    
    #也或者给mask里每个object加不同颜色:
    labels, num = measure.label(img, return_num=True)
    dst = color.label2rgb(img)
    plt.imshow(dst,cmap='gray',interpolation='nearest')
    plt.show()
    
    1. 添加一对一对文件(train和label):
     img_list = []
     for img in os.listdir(os.path.join(image_dir)):
         img_path = os.path.join(image_dir, img)
         label_path =  os.path.join(label_dir, img.replace('fullstack', 'cellmask')) #img:MB0000_1_527_fullstack.tiff    label: MB0000_1_527_cellmask.tiff
         img_list.append([img_path, label_path])
    
    1. 图像上采样:将图片扩充(padding)成固定尺寸,eg. 512*512
    #图片padding在图像学上称为上采样
    def pad_image(array, label):
        _, width, height = array.shape
        pad_w = 0
        pad_h = 0
        if width<513:
            pad_w = 513-width
        if height<513:
           pad_h = 513-height
    
        array_pad = np.pad(array,((0, 0),
                                  (pad_w//2, pad_w-pad_w//2),#向上填充1个维度,向下填充两个维度
                                  (pad_h//2, pad_h-pad_h//2))#向左填充2个维度,向右填充一个维度
                                  ,mode="constant",#填充模式
                                  constant_values=(0,0))#第一个维度(就是向上和向左)填充6,第二个维度(向下和向右)填充5
        label_pad = np.pad(label,(
                                  (pad_w//2, pad_w-pad_w//2),#向上填充1个维度,向下填充两个维度
                                  (pad_h//2, pad_h-pad_h//2))#向左填充2个维度,向右填充一个维度
                                  ,mode="constant",#填充模式
                                  constant_values=(0,0))#
        return array_pad, label_pad
    
    1. 图片下采样,即图片随机裁剪成固定尺寸:
    def randomcrop(crop_size, image, label):
        z, x, y = image.shape
        size_z, size_x, size_y = crop_size
    
        if x < size_x or y < size_y or z < size_z:
            raise ValueError
    
        #z1 = np.random.randint(0, z - size_z)
        x1 = np.random.randint(0, x - size_x)
        y1 = np.random.randint(0, y - size_y)
    
        image = image[0: 50,           x1: x1 + size_x, y1: y1 + size_y]
        label = label[                 x1: x1 + size_x, y1: y1 + size_y]
    
        return image, label
    
    1. 椭圆拟合
    cv2.fitEllipse(points)
    
    # points类型要求是numpy.array([[x,y],[x1,y1]...]) 
    #注意:并不是把所有点都包括在椭圆里面,而是拟合出一个椭圆尽量使得点都在圆上
    
    cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]]) 
    
    # 其中每个参数的意义如下:
    
    # img 图像
    
    # center 中心坐标
    
    # axes 椭圆的尺寸(长短轴)
    
    # angle 旋转角度
    
    # startAngle 起始角度
    
    # endAngle 终止角度
    
    # 后面参数都是跟线条有关的
    #注意:
    # . 平时我们用cv2.ellipse来画椭圆的时候,给定的长短轴都是半轴的长度;
    # . 用cv2.fitEllipse拟合出来的是半轴的双倍长度。在用cv2.ellipse绘制的时候注意;
    # . 如果直接用cv2.fitEllipse拟合出来的参数绘制,可以直接将拟合参数作为cv2.ellipse的参数,而不必将长短轴除以2,如下图所示。(这儿_ellipse假设是cv2.fitEllipse拟合出来的)
    
    #先拟合,后画圆
    
    1. 统计每个元素的数量
    from collections import Counter
    a = [1, 2, 3, 1, 1, 2]
    result = Counter(a)
    print result
    
    #统计个数并排序
    from collections import Counter
    # 根据数列中字母出现的次数和ASCII的大小,进行排序。
    l1 = ['d', 'f', 'g', 'f', 'e', 'z', 'f', 'a', 'a'] 
    d2 = Counter(l1)
    sorted_x = sorted(d2.items(), key=lambda x: x[1], reverse=True)
    
    1. 列表追加元素:
    #1. +加号添加
    [0,5]+list(range(7,12))
    #[0, 5, 7, 8, 9, 10, 11]
    

    22.列表元素排序:

    #逆序
    sorted(list(np.unique(raw_img)),reverse=True)
    
    1. 删除某些行:
    #法一:删除ImageNumber列为78的行
    ind= al["ImageNumber"]==78
    single_data = al.loc[-ind,]#-表示删除
    
    #法二:删除指定行
    meta0=meta.drop([27,42,46,48],axis = 0)#[27,42,46,48]都是行名
    #删除指定列
    meta0=meta.drop(['a','b'],axis = 1)
    
    1. 将dataframe里的某一列从float转为int
      meta0.loc[:,['FullStack']]=meta0.loc[:,['FullStack']].astype(int)
    2. 删除列表里的nan:
    import math
    list_c=pd.Series(list_c)[[(not math.isnan(x)) for x in list_c]]
    

    25.对数据框按照某一列排序
    a.sort_values(by="mean_pro",ascending=False)#是否升序:否

    1. 将数据框的某一列加一:
      panel.loc[:,['FullStack']]=panel.loc[:,['FullStack']]-1

    2. 逐行往数据框里写入数据

    for i,fn in enumerate(os.listdir(folder_uncertainty)):
        print(i,fn, np.mean(tiff.imread(os.path.join(folder_uncertainty,fn))))
        if i ==0:
            a=pd.DataFrame([i,fn, np.mean(tiff.imread(os.path.join(folder_uncertainty,fn)))]).T
        else:
            a=pd.concat([a,pd.DataFrame([i,fn, np.mean(tiff.imread(os.path.join(folder_uncertainty,fn)))]).T],axis=0)
    
    
    a.columns=["index","fn","mean_pro"]
    a.index=range(a.shape[0])
    a
    
    
    1. python 一行语句实现if else:
      x if x > y else y
    #value_when_true if condition_is_ture else value_when_condition_is_false
    max_value =       x if x > y else y
    #这一行命令的逻辑:若x > y,则max_value = x,否则:max_value = y。
    
    
    1. python 直接替换列表中的元素三种方法:
    #法一:
    aaa=['黑色','红色','白色','黑色']
    bbb=['黄色' if i =='黑色' else i for i in aaa]
    bbb
    #结果:
    #['黄色', '红色', '白色', '黄色']
    
    #法二:(替换批量的元素)
    aaa=['黑色','红色','白色','黑色']
    ccc=['黑色','红色']
    bbb=['黄色' if i in ccc  else i for i in aaa]
    bbb
    #结果:
    #['黄色', '黄色', '白色', '黄色']
    
    #法三:(替换多个元素)
    aaa=['黑色','红色','白色','黑色']
    ccc={'黑色':'黄色','红色':'白色'}
    bbb=[ccc[i] if i in ccc else i for i in aaa]
    bbb
    #结果:
    #['黄色', '白色', '白色', '黄色']
    
    
    1. 输出多个字符串+数字
    print("dice:%f, dice_nuclei:%f, dice_cell:%f" % (dice,dice_nuclei, dice_cell))
    #注意:%d整数型;%f浮点型
    
    
    1. 画直方图
    plt.hist(data, bins=[0, 5, 10, 15, 20, 25])#表示统计这批数据在0-5区间、5-10、10-15、15-20、20-25区间内数据的频次
    #[ 7549, 16011, 25071, 23348, 19649]
    
    plt.hist(data, bins=[0, 5, 10, 15, 20, 25,30,35])#表示统计这批数据在0-5区间、5-10、10-15、15-20、20-25、25-30、30-35区间内数据的频次
    #[ 7549, 16011, 25071, 23348, 16904, 12511, 12640]
    
    
    import matplotlib.pyplot as plt
    fig,(ax0, ax1,ax2)= plt.subplots(1, 3, figsize=(8*3, 8*1))
    
    ax0.hist(a["dice"])
    #显示子图的坐标轴
    ax0.axis('on')
    #设置子图的标题
    ax0.set_title("dice on all test images")
    #设置子图的x轴名称
    ax0.set_xlabel("dice")
    #设置子图的y轴名称
    # ax0.set_ylabel("frequency")
    
    
    # b[b>0]=255
    ax1.hist(a["dice_nuclei"])
    ax1.axis('on')
    ax1.set_title("dice for nuclei mask on all test images")
    ax1.set_xlabel("dice")
    # ax1.set_ylabel("frequency")
    
    # c=tiff.imread("/mnt/md0/qy/project/unet/train/test/mask_nuclei/MB0530_1_348_ilastik_s2_Probabilities_nuc_mask.tiff")
    # c[c>0]=255
    ax2.hist(a["dice_cell"])
    ax2.axis('on')
    ax2.set_title("dice for cell mask  on all test images")
    ax2.set_xlabel("dice")
    # ax2.set_ylabel("frequency")
    
    #设置总图标题
    # fig.suptitle('Dice')
    
    fig.tight_layout()
    
    1. pandas多条件组合筛选数据:
    props[(props['minor_axis_length']>0) & (props['area']>2)]
    #DataFrame某一列按照条件筛选,另一列赋值,一定加loc
    df.loc[((df.vol_avg_daily < 95) | (df.vol_avg_daily > 110)) & (df.wiring_mode == '2'), 'vol_if_exception'] = 1
    

    32.1 同时取出数组的某几行某几列数据

    #取出1,2行数据
    C_A = c[[0,2]]  #必须先取出想要的行数据,再取出想要的列数据
    #取出3、4列数据
    C_A = C_A[:,[2,3]]
    #注意:不能同时取
    
    1. 与操作:
    if (img.shape[0] >= 250) & (img.shape[1] >= 250): .......#注意:一定要加括号
    
    1. 从列表里删除所有的某值
    #方法一:耗时长
    c=[1,2,4,1,1,2]#len=6
    
    for i in range(len(c)-1,-1,-1):#注意这里一定要是递减的,这样减到最后c[i]才不会因为c里元素的删减而超出索引。[5, -1],step=-1 >>>> [5,4,3,2,1,0]
    
         if c[i]==1:
    
              c.remove(1)
    
    print(c)
    
    #方法二:
    arr=[1,1,3]
    
    print(list(filter(lambda x:x!=1,arr)))
    
    1. 把一个矩阵行优先展成一个向量
    # 有两种方式:
    # numpy.ravel()   VS   numpy.flatten()
    # 首先声明两者所要实现的功能是一致的(将多维数组降位一维),两者的区别在于: 返回拷贝(copy)还是返回视图(view)
    
    # 1. numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响原始矩阵
    x = np.array([[1, 2], [3, 4]])
    print(x.flatten()[1] = 100)
    #array([[1, 2],
    #       [3, 4]])            # flatten:返回的是拷贝,不会对数据进行修改
    
    
    # 2.而numpy.ravel()返回的是视图,会影响原始矩阵。
    print(x.ravel()[1] = 100)  #ravel()则回对数据进行就该
    #array([[  1, 100],
    #       [  3,   4]])
    
    1. 将array展开成一维向量、统计array里每个元素的数量,排序
    #将array展开成一维向量
    labels.flatten()
    
    #统计array里每个元素的数量,按数量排序
    from collections import Counter
    
    d2=Counter(labels.flatten())
    sorted(d2.items(), key=lambda x: x[1], reverse=True)
    
    #统计数值数量,并按数值的大小排序
    Counter(sorted(im.flatten(),reverse=True))
    

    37.获取当前系统时间

    #获取时间
    datetime.datetime.now()
    # datetime.datetime(2020, 7, 24, 10, 34, 36, 503188)
    
    #分别获取年月日
    datetime.datetime.now().year
    datetime.datetime.now().month
    datetime.datetime.now().day
    datetime.datetime.now().hour
    datetime.datetime.now().minute
    datetime.datetime.now().second
    
    #获取到的时间转换成字符串
    datetime.datetime.now().strftime("%Y-%m-%d-%H-%M")
    datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
    

    查看某数据类型的范围

    np.iinfo(a.dtype)
    
    np.iinfo(a.dtype).max
    

    np.histogram

    imhist,bins = np.histogram(im,256)
    #把im里的数据从[im.min, im.max]之间划分成256个区间
    #计算每个区间段内的频数,
    #所以imhist是有256个值的list,每个值代表im内有多少个值出现在该区间
    #bins是列出了257个数,代码256个区间的257个临界点
    
    imhist,bins = np.histogram(im,256,normed=True)
    
    
    a = np.random.rand(100)      #表示在(0,1)之间随机产生100个数
    #1. 自定义区间数量和区间范围
     np.histogram(a,bins=5,range=(0,1))#表示0-1内划分成5个区间
    #(array([10, 24, 17, 19, 30]), array([0. , 0.2, 0.4, 0.6, 0.8, 1. ]))   #表示在[0,0.2)之间有10个数,以此类推
    
    #2. 自定义分区间
    np.histogram(a,bins=[0,0.2,0.5,0.8,1])#自定义统计区间
    #(array([10, 33, 27, 30]), array([0. , 0.2, 0.5, 0.8, 1. ])) 
    

    读h5文件:

    data = h5py.File('MB0002_1_345_ilastik_x383_y71_w500_h500.h5', "r")
    data
    #<HDF5 file "MB0002_1_345_ilastik_x383_y71_w500_h500.h5" (mode r)>
    list(train_dataset)
    #['stacked_channels']
    data['stacked_channels'][:]
    
    #写h5文件
    f = h5py.File('example.h5','w') 
    f['stacked_channels'] = data               #将数据写入文件的主键data下面
    f.close()   
    

    找分位数

    dat.quantile(0.9)#对于数据框,默认找到每一列的分位数
    dat['HH3'].dat.quantile(0.9)#找到一组数据的分位数
    

    array数组二值化

    (array>0.5).astype(np.uint8)
    
    (0.6*np.ones([3,3])>0.5).astype(np.uint8)
    array([[0, 0, 0],
           [0, 0, 0],
           [0, 0, 0]], dtype=uint8)
    

    python中[-1]、[:-1]、[::-1]、[2::-1]的使用方法

    import numpy as np
    a=[1,2,3.4,5]
    print(a)
    [ 1 2 3 4 5 ]
     
    print(a[-1]) ###取最后一个元素
    [5]
     
    print(a[:-1])  ### 除了最后一个取全部
    [ 1 2 3 4 ]
     
    print(a[::-1]) ### 取从后向前(相反)的元素
    [ 5 4 3 2 1 ]
     
    print(a[2::-1]) ### 先将列表翻转,再读取从索引2开始的元素。
    [ 3 2 1 ]
    

    np.clip逐个元素将超出指定范围内的数强制变为边界值

    强制变为边界值

    numpy.clip(a, a_min, a_max, out=None)
    
    x=np.array([[1,2,3,5,6,7,8,9],[1,2,3,5,6,7,8,9]])
    np.clip(x,3,8)
    #array([[3, 3, 3, 5, 6, 7, 8, 8],
           [3, 3, 3, 5, 6, 7, 8, 8]])
    

    系统命令:

    1. 复制文件到另一个文件夹
    import shutil
    shutil.copy(file, file_dir)
    
    2. 文件重命名
    os.rename(old_file,new_file)
    
    3. 0 查看路径下所有文件的全路径:
    import glob
    import natsort
    read_folder = glob.glob("test_folder/*")
    3.1 并排序
    x_sort = natsort.natsorted(read_folder) 
    总结:查看路径下所有文件的全路径并排序:
    natsort.natsorted(glob.glob(test_folder))
    
    1. 判断文件夹是否存在,不存在则创建
    if not os.path.exists(path):
        os.mkdir(path)
    

    追加文件命令:

    1. 往csv文件里追加pandas数据框
    pandas_d.to_csv('./static.csv',mode='a',encoding='utf-8’,header=False,index=False)#行名和列名不写进去
    
    pandas_d.to_csv('./static.csv',mode='a',encoding='utf-8’,header=True,index=True)
    
    2. 往txt文件里追加字符串(注意这种方法只能追加字符串文本进去,pandas数据框是无法追加的)
    with open(os.path.join(output_path," self_measured_SingleCell_data.csv"), 'a')as f:
        f.write(“这是新增的一行”)#注意:f.write()的参数只接收字符串
    

    Python保留指定位数的小数(能够进行四舍五入)

    1.针对单个数字

    #1. ‘%.2f’ %f 方法
    f = 1.123456
    
    print("%.5f" % f)
    print("%.4f" % f)
    print("%.3f" % f )
    #结果:
    #1.12346
    #1.1235
    #1.123
    #这个方法会进行四舍五入
    
    #2. format函数
    
    print(format(1.123456, '.3f'))
    print(format(1.123456, '.4f'))
    print(format(1.123456, '.5f'))
    结果:
    1.123
    1.1235
    1.12346
    这个方法会进行四舍五入
    

    2.针对数组

    numpy数组四舍五入
    numpy.around(nlist, number)
    传入一个np的数组和需要保留的位数作为参数
    
    x=[0.         0.01298701 0.02597403 0.03896104 0.05194805 0.06493506
     0.07792208 0.09090909 0.1038961  0.11688312]
    
    np.around(x, 3)   #保存为3位小数
    #array([0. , 0.013, 0.026, 0.039, 0.052, 0.065, 0.078, 0.091, 0.104, 0.117])
    

    多线程:

    from multiprocessing import Pool
    def fun(i):
      ...
    
    res=fun(0)
    with Pool(80) as p:
        result = p.map(fun, [i for i in range(1,len(images))])
    

    pd.DataFrame

    1.通过字典来构造
    pd.DataFrame( {列名1:[行数据列表1],
    列名2:[行数据列表2],
    列名3:[行数据列表3]})

    seaborn画图

    1. 画多张seaborn图:你可以用subplot的形式来表达。如下程序段:
    f=plt.figure(figsize=(8*3,8*1)
    f.add_subplot(2,1,1)
    sns.distplot (#你需要显示的图1)
    f.add_subplot(2,1,2)
    sns.distplot (#你需要显示的图2)
    图1和图2 可以以列的形式显示出来。
    
    1. seaborn画直方图
    import seaborn as sns
    #sns.distplot参数说明:
    #(1) hist=True表示显示直方图,即是否显示柱子
    
    #(2) kde是否显示密度函数线条:
    #kde默认True
    #不显示kde密度图的话,柱子的高度是频数
    
    #(3) fit:指定一个分布,可以用来和kde核密度函数比较
    #fit=stats.gamma,表示拟合伽马分布,可以和核密度函数比较。
    1. 统计频次
    sns.distplot(props["area"],bins=50,kde=False)
    2. 统计频率(kde是和概率密度函数,其实就是对频率的拟合曲线)
    # sns.distplot(props["area"],hist=False/True, kde=True)
    
    
    #再同一张子图画多条曲线并备注(label属性并plt.legend()))
    f=plt.figure(figsize=(8*3,8*1))
    
    f.add_subplot(1,3,1)
    sns.distplot(pred_props["area"],bins=100,color="purple",hist=False)
    
    f.add_subplot(1,3,2)
    sns.distplot(ground_props["area"],bins=100,color="red",hist=False)
    
    f.add_subplot(1,3,3)
    sns.distplot(ground_props["area"],bins=100,color="red",hist=False,label="ground truth")
    sns.distplot(pred_props["area"],bins=100,color="purple",hist=False,label="prediction")
    
    #画图注(就是每张图里发label属性里写的)
    f.legend()
    
    f.show()
    

    Python_matplotlib画图时图例说明(legend)放到图像外侧

    用python的matplotlib画图时,往往需要加图例说明。如果不设置任何参数,默认是加到图像的内侧的最佳位置。

    import matplotlib.pyplot as plt
    import numpy as np
     
    x = np.arange(10)
     
    fig = plt.figure()
    ax = plt.subplot(111)
     
    for i in xrange(5):
        ax.plot(x, i * x, label='$y = %ix$' % i)
     
    plt.legend()
     
    plt.show()
    

    如果需要将该legend移到图像外侧,有多种方法,这里介绍一种。

    在plt.legend()函数中加入若干参数:plt.legend(bbox_to_anchor=(num1, num2), loc=num3, borderaxespad=num4)
    参数解释在这里:
    bbox_to_anchor(num1,num2)表示legend的位置和图像的位置关系,num1表示水平位置,num2表示垂直位置。
    (num1=0表示legend位于图像的左侧垂直线)
    (这里的其它参数设置:num2=0,num3=3,num4=0)

    python脚本里获取位置。

    在目录example里运行code/main.py,那么:
    (1)./:表示当前脚本被运行的位置即example/(而不是脚本的位置即example/code/)
    os.getcwd()等同于./,输出当前脚本的运行环境目录
    (2)sys.path[0]会输出脚本的绝对位置即example/code/

    相关文章

      网友评论

          本文标题:python知识点汇总

          本文链接:https://www.haomeiwen.com/subject/cdvzyhtx.html