首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >if语句:数组是否有单位/维数(pint)

if语句:数组是否有单位/维数(pint)
EN

Stack Overflow用户
提问于 2020-01-26 14:08:29
回答 1查看 228关注 0票数 4

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

代码语言:javascript
复制
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语句,这样我就不会在r(C0,t)中的C以mol^2/L^2为单位结束。

代码语言:javascript
复制
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语句,这样它才能检查任何类型的单位输入?

回溯:

代码语言:javascript
复制
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'
EN

回答 1

Stack Overflow用户

发布于 2020-01-26 14:52:20

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

代码语言:javascript
复制
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])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59915986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档