[英]My code somehow multiplies by a factor of 0.5 and I don't know why
我為我的一個繪圖腳本編寫了一個單位轉換器。 該轉換器的工作原理是確定所提供數據的單位,將其轉換為 SI 單位,然后將其轉換為目標單位。
它對所有單位轉換都沒有問題,除了一個:目標單位“毫摩爾/克”。
這是轉換器的代碼:
import scipy.constants as units
import numpy as np
example_data = np.arange(10,20)
def unit_converter(unit,target_unit,numerical_data):
unit_converter_dict = {'kPa':units.kilo,
'atm':units.atm,
'bar':units.bar,
'mmHg':units.mmHg,
'psi':units.psi,
'cc/g':units.centi**3/units.gram,
'cm/g':1/units.gram,
'cm/kg':1,
'mmol/g':1/(22.41396954)}
converted_data = numerical_data*(unit_converter_dict[unit]/unit_converter_dict[target_unit])
return converted_data
print(unit_converter('cc/g','mmol/g',example_data))
出於某種原因,轉換后的數據正好是它應該的一半,我不知道為什么。 如果您不知道為什么 mmol/g 應該是 22.41...,那是因為在 1.0325 bar 壓力和 0°C 下,一摩爾理想氣體的體積為 22.41...升。
因此,當我從 cc/g 開始並將其轉換為 cm/kg 時,我只需乘以 22.41 mmol/g 即可獲得正確的轉換。 但由於某種原因,我所有的值都只有轉換后的一半。
如果我使用 2*22.41... 順便說一句,我會得到正確的結果。
有誰知道為什么會這樣? 因子 2(或相反,1/2)從何而來?
我已經確定這個問題是由這部分代碼引起的,而不是由下游的其他操作引起的。
它沒有關閉 1/2,盡管它很接近。 另外,因為你的單位是 mmol,我想你想要 1000/22.41396954。 另外,由於您要進行雙重除法,因此我認為轉換時需要翻轉單位。
import scipy.constants as units
import numpy as np
example_data = np.arange(10,20)
def unit_converter(unit,target_unit,numerical_data):
unit_converter_dict = {'kPa':units.kilo,
'atm':units.atm,
'bar':units.bar,
'mmHg':units.mmHg,
'psi':units.psi,
'cc/g':(units.centi**3 /units.gram),
'cm/g':1/units.gram,
'cm/kg':1,
'mmol/g': (22.41396954/1000)}
converted_data = numerical_data*(unit_converter_dict[unit] / unit_converter_dict[target_unit])
return converted_data
print(unit_converter('cc/g','mmol/g',example_data))
# [0.44615033 0.49076537 0.5353804 0.57999543 0.62461047 0.6692255 0.71384053 0.75845557 0.8030706 0.84768563]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.