四级物理实验
1.批量生成文件名
# 编号列表 num = [] for i in range(10): num.append(i) # 文件名 filename = [] name = 'filename' for i in num: filename.append(name + str(i) + '.txt') # filename为文件名列表,查看输出结果 for i in filename: print(i)
结果:
2.读取txt文件,成为numpy矩阵
import numpy as np data = np.loadtxt(m,delimiter=' ')) #delimiter是txt文件中数据间间隔的标志
3.读取文件,并对内容做修改
def text_fmat_handing(initDataFname,restDataFname): ''' 格式处理/仅适用于本数据‘ 给原始txt数据文件路径和一个空的txt文件路径 符合numpy的文件格式(其中delimiter=","),储存在给出的空文件 ''' f1 = open(initDataFname) f2 = open(restDataFname,"r+") initData = f1.read() restData = initData.replace(" ",",").replace(" ","").replace("\t","\n").replace(",\n","\n").replace("\n\n","\n") f2.write(restData) f1.close() f2.close()
4.对列表或者numpy矩阵统计频次
from collections import Counter def text_element_count(alist): ''' a=r.keys()元素 b=r.values()为对应出现的次数 max(a),min(a),len(a) max(b),min(b),len(b) ''' r = Counter(alist) return r
5.删除numpy矩阵中的某一行或某一列
import numpy as np
def text_cnorrw_delete(array,index_list,axis_num): ''' 删除np_array中的行或列,删除的行列位置又index_list给出 axis_num =0为删除行,等于1为删除列 ''' a = np.delete(array,index_list,axis=axis_num) return a
6.画条形图(有中文显示设置)
import matplotlib.pyplot as plt def draw_bar(values,lable=[],title="柱图",xlabel = 'x',ylabel = 'y',size = (8,7)): plt.rcParams['font.sans-serif'] = 'SimHei' #设置中文显示 plt.rcParams['axes.unicode_minus'] = False #设置正常显示符号 plt.figure(figsize=size) plt.bar(range(len(values)),values) #plt.xticks(range(67),hit_count.keys()) plt.xlabel(xlabel) plt.ylabel(ylabel) plt.title(title) plt.show()
7.在一个方形图上找出点并标记颜色
plt.figure(figsize=(8,7)) plt.title('Hit Map(chip2)') plt.scatter(x1,y1,marker='o',c='red') plt.scatter(x2,y2,marker='s',c='blue') plt.xlabel('x') plt.ylabel('y') plt.xticks(range(610,660,2)) #x从610,660,2表示间隔 plt.yticks(range(0,520,20)) # 同上 plt.legend(['Dead','Inefficient ']) #图例 plt.show()
8.一个方形,给出了一些点的位置,要把这个方形上没有给出的位置找出来
这个一般思路很简单,但是速度有块又慢。
下面要求是已经给出了1024*512点阵中的一些点,在sites_chip中,现在要求找出其余没给出点的位置。
sites_chip2 = [] for m in condition_01[2]: sites_chip2.append((m[0],m[1])) # 就是存着现在数据里面已经有的坐标,为1024*512点阵中的一些点 ''' # 这种直接的方法很慢 sites_dead_chip2 = [] i = 0 while i < 1024: j = 0 while j < 512: a = (i,j) print(a) if (a in sites_chip2 != True): sites_dead_chip2.append(a) j += 1 i+=1 '''
# 这种方法是实验时数据有一定的特点,所以这样做可以减少很多步骤 a= Counter(condition_01[2][:,0]).values() # chip2,行650,651,616,617不足512 sites_dead_chip2 = [] # dead pixels'sites of chip2 i = 0 while i < 512: if ((650,i) in sites_chip2) != True: sites_dead_chip2.append((650,i)) if ((651,i) in sites_chip2) != True: sites_dead_chip2.append((651,i)) if ((616,i) in sites_chip2) != True: sites_dead_chip2.append((616,i)) if ((617,i) in sites_chip2) != True: sites_dead_chip2.append((617,i)) i+=1 print(i)
那根据现在我的想法,可以先生成一个1024*512的0矩阵,将已给出的点的位置的值改为1。再遍历这个矩阵,值为0的位置就是没给出的点的位置。
import numpy as np sites = [] #给出的点的位置 for m in condition_01[2]: sites.append((m[0],m[1])) map1 = np.zeros((512,1024)) for m in sites: map1[m[0]][m[1]] = 1 unsite = [] #没有给出的点的位置 for i in range(512): for j in range(1024): if map1[i][j] = 0: unsite.append((i,j))
9.方形中,给出了一些点的值,画热力图。
画热力图需要一个数值矩阵。已给的数据是点的坐标以及它对应的值,如(3,4,87)代表点(3,4)处的值为87。为了画热力图,需要把值放进矩阵的相应位置中。
所以可以先生成一个0矩阵,再修改对应点位置的值。再画热力图。
map1 = np.zeros((512,1024)) for m in condition_10[i]: map1[int(m[1])][int(m[0])] = m[2] plt.imshow(map1) plt.colorbar() #生成色条。相当于图例 plt.show()
轩中一人,名为萧百,意为小白。