之前都是把 DaVis 计算得到的速度场或者标量场结果存成文本文件,例如 B00001.txt 再用python读。下面是我写的读标量场和矢量场的函数,其中load_piv 中 size 参数非0时,会将数据 binning 降低数据数量,提高对比度。
#%% read DaVis txt file
def load_piv(filename, size):
"""
extract PIV data
filename: txt file name
size: average size
"""
lavision = open(filename)
step, xnum, ynum = lavision.readline().split(' ')[3:6]
lavision.close()
step = int(step)
xnum = int(xnum)
ynum = int(ynum)
size = int(size)
oned = pd.read_csv(filename, decimal=',', sep='\t', skiprows=1, header=None)
X = np.reshape(oned.values[:, 0], (xnum, ynum), 'C').astype('float64')
Y = np.reshape(oned.values[:, 1], (xnum, ynum), 'C').astype('float64')
U = np.reshape(oned.values[:, 2], (xnum, ynum), 'C').astype('float64')
V = np.reshape(oned.values[:, 3], (xnum, ynum), 'C').astype('float64')
if size != 1:
X = X[:int(xnum // size) * size, :int(ynum // size) * size].reshape(int(xnum // size), size, int(ynum // size),size).mean(axis=(1, 3))
Y = Y[:int(xnum // size) * size, :int(ynum // size) * size].reshape(int(xnum // size), size, int(ynum // size),size).mean(axis=(1, 3))
U = U[:int(xnum // size) * size, :int(ynum // size) * size].reshape(int(xnum // size), size, int(ynum // size),size).mean(axis=(1, 3))
V = V[:int(xnum // size) * size, :int(ynum // size) * size].reshape(int(xnum // size), size, int(ynum // size),size).mean(axis=(1, 3))
X = X.astype('float32')
Y = Y.astype('float32')
U = U.astype('float32')
V = V.astype('float32')
return step, xnum, ynum, X, Y, U, V
def load_plif():
plif = open(filename)
firstline = plif.readline().split(' ')
x_num,y_num = firstline[3:5]
delta_x,x0 = firstline[6:8]
delta_y,y0 = firstline[10:12]
plif.close()
x_num = int(x_num)
y_num = int(y_num)
x0 = float(x0)
y0 = float(y0)
delta_x = float(delta_x)
delta_y = float(delta_y)
X = np.arange(x0, x0+(x_num)*delta_x, delta_x)
Y = np.arange(y0, y0+(y_num)*delta_y, delta_y)
plif_txt = pd.read_csv(filename, decimal=',', sep='\t', skiprows=1, header=None)
plif = plif_txt.values
return x_num,y_num,X,Y,plif
貌似用官方的软件包可以读更多的文件格式吧。于是就开始安装了。
首先发现不知道为什么 spyder 启动出问题了,numpy 版本不对,需要重装 numpy,就好了。