在Python中使用netCDF4读取变量时如何指定精度?

时间:2018-07-16 17:14:43

标签: python netcdf4

我正在尝试读取ADCP(海洋当前速度)数据并对其进行清理/处理。数据以我正在使用的x文件中的y.nc组件速度给出,因此我必须从这些组件计算合成速度和角度。使用np.square将分量速度范围内的各个元素平方成平方时,我遇到了精度问题,这些误差在仪器本身的误差范围内。

我怀疑此错误是由于原始数据(例如-0.02162790298461914)的长度引起的。我想将原始数据的精度设置为0.001(ADCP的固有误差),然后重新计算以查看计算误差是否减小。使用infile.variables['variable'][:]读取数据时,是否可以手动设置精度?如果可以,我该如何处理?还是可能有一个numpy方法的错误少于np.square(array)

错误的单个示例:

x_vel = -0.02162790298461914
y_vel = -0.3665189743041992

手动计算的total_vel = 0.36588029782633846(此手动计算是使用python使用m.sqrt((-0.3665189743041992) ** 2 + (-0.02162790298461914 ** 2))进行的)

sript使用total_velnp.sqare在numpy数组= np.sqrt上计算出0.3671565353870392

脚本代码:total_v = np.sqrt(np.square(x_vel) + np.square(y_vel))

1 个答案:

答案 0 :(得分:0)

看来我只是忽略了符号约定的错字...使用numpy函数的输出实际上是正确的。问题源于-1 ** 2!=(-1)** 2以及我在计算中误用括号...猜猜我们每个人都需要花费数小时不时地寻找脑部放屁

手动输入应该是m.sqrt((-0.3665189743041992) ** 2 + (-0.02162790298461914) ** 2)

代替m.sqrt((-0.3665189743041992) ** 2 + (-0.02162790298461914 ** 2))

(请注意第二项上的括号分组...)