gpt4 book ai didi

python - if语句: whether an array has units/dimensions (pint)

转载 作者:行者123 更新时间:2023-12-02 05:27:48 25 4
gpt4 key购买 nike

我的变量 C0 以 pint.UnitRegistry 单位 mol/L 定义。我需要在函数中使用它,但为了让 Python 不会在通用函数的单位不一致的情况下调用我,我必须在带有单位的函数中定义一个新变量,如下所示。

import pint
u = pint.UnitRegistry()

C0 = [10**(-3),10**(-6),0] *u.mol/u.L

def r(c,t):
C = c * u.mol/u.L #Python expects c to be dimensionless
return ν * k[3]*C0[1]*C[0] / ((k[2]+k[3])/k[1] + C[0]) #k and ν are arrays for the problem I'm working on.

我想添加一个 if 语句,这样我就不会以 mol^2/L^2 为单位结束 r(C0,t) 中的 C。我有的是

def r(c,t):
if c.dimensionless == True:
C = c * u.mol/u.L
else:
C = c
return ν * k[3]*C0[1]*C[0] / ((k[2]+k[3])/k[1] + C[0])

但是当我用 C0 运行它时,它告诉我 C0 没有称为无量纲的属性。我应该如何编辑 if 语句,以便它可以检查任何类型的单位输入?

回溯:

File [Redacted], line 32, in <module>
Ct = odeint(r,C0,t)

File "C:\Users\Spencer\Anaconda3\lib\site-packages\scipy\integrate\odepack.py", line 233, in odeint
int(bool(tfirst)))

File [Redacted], line 24, in r
if c.dimensionless == True:

AttributeError: 'numpy.ndarray' object has no attribute 'dimensionless'

最佳答案

环顾四周后,我发现 pint.UnitRegistry.Quantity 函数允许对没有 native “维度”属性的项目进行维度检查。另请注意从上面复制和添加单元的相反顺序。

def r(c,t):
if u.Quantity(c).dimensionality == 'substance/length**3':
C = c
else:
C = c * u.mol/u.L
return ν * k[3]*C0[1]*C[0] / ((k[2]+k[3])/k[1] + C[0])

关于python - if语句: whether an array has units/dimensions (pint),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59915986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com