四级物理实验

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()

 

posted @ 2022-01-05 23:57  江南苑轩  阅读(49)  评论(0编辑  收藏  举报