我有一个函数,它传递了一个一维坐标数组。这些是已经在字典中定义分段函数的部分的结尾,并且也作为输入传递。但是,在进行比较时,数组值会在循环中更改精度,因此比较不再起作用。代码如下:
def parse_mass_data(mass_prop_file, slices, wingline, y_coords):
data = pd.read_csv(mass_prop_file, delim_whitespace=True,index_col=False, skiprows = 10, skipfooter=(slices+5))
cogy = []
mass = []
y = y_coords.astype(np.float64)
print(y)
for i in range(len(data['Name'].values)):
if data['Name'][i] != 'Totals'and data['Name'][i] != 'Name':
cogy.append(data['cgY'].values[i])
mass.append(data['Mass'].values[i])
cogy = np.array(list(map(float,cogy)))
mass = np.array(list(map(float,mass)))
x = np.zeros(len(mass))
z = np.zeros(len(mass))
for i in range(len(mass)):
for j in range(len(y_coords)-1):
if cogy[i] >= y[j] and cogy[i] < y[j+1]:
x[i] = wingline['xy'][j][0] * cogy[i] + wingline['xy'][j][1]
z[i] = wingline['yz'][j][0] * cogy[i] + wingline['yz'][j][1]
# print(wingline['xy'][j],wingline['yz'][j])
print(y[j],y[j+1])
# print(i,x[i],cogy[i],z[i])
字符串
输出如下:
[ 0. 6. 10.]
0.0 5.999999999999999
5.999999999999999 9.999999999999998
0.0 5.999999999999999
5.999999999999999 9.999999999999998
0.0 5.999999999999999
5.999999999999999 9.999999999999998
0.0 5.999999999999999
5.999999999999999 9.999999999999998
型
正如您所看到的,输入数组和循环索引中的值不匹配,从而阻止了比较工作。我怎样才能进行这种比较,或者有更好的方法来实现这一点?
我知道numpy在这里有一个插值函数,但是我已经有了拟合值的方程,如果输入数据一开始就不好,我可以使用这个函数吗?
1条答案
按热度按时间ubof19bj1#
由于计算机的工作方式,根据这个类似的问题,这是一个已知的问题:Is floating point math broken?
我的解决方案是使用绝对值比较,就像这个问题的公认答案中所建议的那样。