我创建了一个包含速度,温度和海拔高度值的词典:
mach_dict = dict(velocity=[], altitude=[], temperature=[])
我用它来存储爬升,巡航和下降段的飞行平原值。
mach_dict = {'velocity': [0, 300, 495, 500, 300], 'altitude': [288.15, 288.15, 288.15, 288.15, 288.15], 'temperature': [0, 0, 50, 50, 50]}
我需要创建一个函数(def),它返回一个存储每个段的马赫数的字典。
估算Mach
我使用公式:
Mach = velocity / sqrt(1.4 * 286 * (Temperature - altitude * 0.05))
有人可以提供帮助吗?
答案 0 :(得分:0)
您可以zip
字典中的列表值,并使用列表理解计算新密钥mach_number
:
import math
def compute_mach(velocity, altitude, temperature):
return velocity/math.sqrt(1.4*286*(temperature-altitude*0.05))
mach_dict['mach_number'] = [compute_mach(v, a, t) for v, a, t in zip(mach_dict['velocity'],
mach_dict['altitude'],
mach_dict['temperature'])]
答案 1 :(得分:0)
您将3个列表压缩在一起以生成velocity, altitude, temperature
元组:
mach_dict['mach'] = mach_per_section = []
for vel, alt, temp in zip(
mach_dict['velocity'], mach_dict['altitude'], mach_dict['temperature']):
mach = vel / sqrt(1.4 * 286 * (temp - alt * 0.05))
mach_per_section.append(mach)
很遗憾,您的输入会产生ValueError: math domain error
,因为有些人会为1.4 * 286 * (temp - alt * 0.05)
获得负值。
答案 2 :(得分:0)
从技术上讲,这是修改传入的字典,return
是不必要的。
from math import sqrt
def func(d):
machs = []
for v, a, t in zip(d['velocity', d['altitude'], d['temperature']):
mach = v / sqrt(1.4 * 286 * (t - a * 0.05))
machs.append(mach)
d['mach'] = machs
return d
答案 3 :(得分:0)
你可以使用pandas和numpy来做到这一点
import pandas as pd
import numpy as np
def compute(mach_dict):
df = pd.DataFrame.from_dict(mach_dict)
r = df.velocity / np.sqrt(1.4 * 286 * (df.temperature - df.altitude * 0.05))
return list(r)
mach_dict={'velocity':[0, 300, 495, 500, 300],'altitude':[288.15, 288.15, 288.15, 288.15, 288.15],'temperature':[0, 0, 50, 50, 50]}
print(compute(mach_dict))
这将处理它会给你NaN的-ve情况