簡體   English   中英

我的代碼以某種方式乘以 0.5 倍,我不知道為什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM