分类目录归档:Python相关

Python相关

CUDA、cudatoolkit和cuDNN的关系

什么是CUDA、cudatoolkit和cuDNN

CUDA: Compute Unified Device Architecture. 是NVIDIA用于GPU的并行计算平台和编程模型。Nvidia官方提供的CUDA 库是一个完整的工具安装包,其中提供了 Nvidia驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。

Anaconda 安装的 cudatoolkit,其主要包含应用程序在使用 CUDA 相关的功能时所依赖的动态链接库。

cuDNN: GPU-accelerated library of primitives for deep neural networks. 是NVIDIA用于DNN的GPU加速库。

CUDA 与 cudatoolkit 的区别

Nvidia 官方提供安装的 CUDA Toolkit 包含了进行 CUDA 相关程序开发的编译、调试等过程相关的所有组件。但对于 Pytorch 之类的深度学习框架而言,其在大多数需要使用 GPU 的情况中只需要使用 CUDA 的动态链接库支持程序的运行,就像常见的可执行程序一样,不需要重新进行编译过程,只需要其所依赖的动态链接库存在即可正常运行。在安装了 cudatoolkit 后,只要系统上存在与当前的 cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行,而不需要安装完整的 Nvidia 官方提供的 CUDA Toolkit。

Tensorflow各版本对应的cuda, cudatoolkit, cudnn

版本 Python 版本 编译器 构建工具 cuDNN CUDA
tensorflow-2.6.0 3.6-3.9 GCC 7.3.1 Bazel 3.7.2 8.1 11.2
tensorflow-2.5.0 3.6-3.9 GCC 7.3.1 Bazel 3.7.2 8.1 11.2
tensorflow-2.4.0 3.6-3.8 GCC 7.3.1 Bazel 3.1.0 8.0 11.0
tensorflow-2.3.0 3.5-3.8 GCC 7.3.1 Bazel 3.1.0 7.6 10.1
tensorflow-2.2.0 3.5-3.8 GCC 7.3.1 Bazel 2.0.0 7.6 10.1
tensorflow-2.1.0 2.7、3.5-3.7 GCC 7.3.1 Bazel 0.27.1 7.6 10.1
tensorflow-2.0.0 2.7、3.3-3.7 GCC 7.3.1 Bazel 0.26.1 7.4 10.0
tensorflow_gpu-1.15.0 2.7、3.3-3.7 GCC 7.3.1 Bazel 0.26.1 7.4 10.0
tensorflow_gpu-1.14.0 2.7、3.3-3.7 GCC 4.8 Bazel 0.24.1 7.4 10.0
tensorflow_gpu-1.13.1 2.7、3.3-3.7 GCC 4.8 Bazel 0.19.2 7.4 10.0

推荐Latex写数学公式

发现直接用Latex写数学公式很舒服,常用的先简略如下:
换行:\\
空格:a\ b
小于等于:\le
大于等于:\ge
分数:\frac{a}{b}
大型分数(无嵌套):dfrac{a}{b}
大范围括号:\left ( \frac{\pi}{2} \right )^n
开根号:\sqrt{\pi}
上标、撇号:a^{\prime}
下标:f_y
三角函数:\sin a, \cos b, \tan c, \cot d, \sec e, \csc f
取大小:\min(x,y), \max(x,y)

希腊字母表
序号 小写 LaTeX 读音
1 α \alpha /ˈælfə/
2 β \beta /ˈbiːtə/
3 γ \gamma /ˈɡæmə/
4 δ \delta /ˈdɛltə/
5 ϵ \epsilon /ˈɛpsɪlɒn/
6 ε \varepsilon /ˈɛpsɪlɒn/
7 ζ \zeta /ˈzeɪtə/
8 η \eta /ˈeɪtə/
9 θ \theta /ˈθiːtə/
10 ϑ \vartheta /ˈθiːtə/
11 ι \iota /aɪˈoʊtə/
12 κ \kappa /ˈkæpə/
13 λ \lambda /ˈlæmdə/
14 μ \mu /mjuː/
15 ν \nu /njuː/
16 ξ \xi /zaɪ, ksaɪ/
17 o o /ˈɒmɪkrɒn/
18 π \pi /paɪ/
19 ϖ \varpi /paɪ/
20 ρ \rho /roʊ/
21 ϱ \varrho /roʊ/
22 σ \sigma /ˈsɪɡmə/
23 ς \varsigma /ˈsɪɡmə/
24 τ \tau /taʊ, tɔː/
25 υ \upsilon /ˈʌpsɪlɒn/
26 ϕ \phi /faɪ/
27 φ \varphi /faɪ/
28 χ \chi /kaɪ/
29 ψ \psi /psaɪ/
30 ω \omega /oʊˈmeɪɡə/
序号 大写 LaTeX 读音
31 Γ \Gamma /ˈɡæmə/
32 Δ \Delta /ˈdɛltə/
33 Θ \Theta /ˈθiːtə/
34 Λ \Lambda /ˈlæmdə/
35 Ξ \Xi /zaɪ, ksaɪ/
36 Π \Pi /paɪ/
37 Σ \Sigma /ˈsɪɡmə/
38 Υ \Upsilon /ˈʌpsɪlɒn/
39 Φ \Phi /faɪ/
40 Ψ \Psi /psaɪ/
41 Ω \Omega /oʊˈmeɪɡə/

 

Python之常用混凝土构件计算01

写在前面的话
最近在的用Jupyter Notebook学习Python,顺便把以前fx-FD10Pro做的构件计算文件重写成Python,就当做练习了。


程序说明:
【a】已知Asp,M,求As
x=h_0-\sqrt{h_0^2-\dfrac{2\left[\gamma_{RE}M-f_y^{\prime}A_s^{\prime}(h_0-a_s^{\prime}\right]}{\alpha_1f_cb}} \\should,\ x\le\xi_bh_0 \\if\ x\ge2a^{\prime},\ A_s=\dfrac{\alpha_1f_cbx+f_y^{\prime}A_s^{\prime}}{f_y} \\if\ x<2a^{\prime},\ A_s=\dfrac{\gamma_{RE}M}{f_y(h-a_s-a_s^{\prime})}
【b】已知As,Asp,求Mu
x=\dfrac{f_yA_s-f_y^{\prime}A_s^{\prime}}{\alpha_1f_cb} \\if\ ,x\ge2a^{\prime},\ M_u=[\alpha_1f_cbx(h_0-\dfrac{x}{2})+f_y^{\prime}A_s^{\prime}(h_0-a_s^{\prime})]/\gamma_{RE} \\if\ ,x<2a^{\prime},\ M_u=f_yA_s(h-a_s-a_s^{\prime})/\gamma_{RE}


#coding=utf-8
#钢筋混凝土参数
def c_hrb():
    global fcuk,HRB,Ec,fc,ft,ftk,Es,fy,fyp,fyk
    global a1,epsilon_cu
    fcuk=Ec=fc=ft=ftk=0.0
    HRB=Es=fy=fyp=fyk=0.0
    #矩形应力图系数a1,C50以下为1.0
    a1=1.0
    #正截面混凝土极限压应变epsilon_cu,C50以下为0.0033
    epsilon_cu=0.0033    
    fcuk=int(input("C?30/35/40"))
    if (fcuk==30):
        Ec=30000
        fc=14.3
        ft=1.43
        ftk=2.01
    elif (fcuk==35):
        Ec=31500
        fc=16.7
        ft=1.57
        ftk=2.2
    elif (fcuk==40):
        Ec=32500
        fc=19.1
        ft=1.71
        ftk=2.39
    HRB=int(input("HRB?300/400/500"))
    if (HRB==300):
        Es=210000
        fy=270
        fyp=270
        fyk=300
    elif (HRB==400):
        Es=200000
        fy=360
        fyp=360
        fyk=400
    elif (HRB==500):
        Es=200000
        fy=435
        fyp=410
        fyk=500
    print('fcuk=',fcuk)
    print('Ec=',Ec)
    print('fc=',fc)
    print('ft=',ft)
    print('ftk=',ftk)
    print('HRB=',HRB)
    print('Es=',Es)
    print('fy=',fy)
    print('fyp=',fyp)
    print('fyk=',fyk)
#函数结束

#1.受弯构件正截面
#矩形双筋(非抗震,gamma_RE=1.0;抗震,《混规》11.1.6,gamma_RE=0.75)
#【a】已知Asp,M,求As
def given_asp_m_solve_as():
    import math
    c_hrb()
    gamma_RE=float(input("抗震0.75,gamma_RE="))
    nsp=float(input("受压筋个数nsp="))
    dsp=float(input("受压筋直径dsp="))
    Asp=nsp*0.25*3.14*(dsp**2)
    M=float(input("kN*m,M="))
    h=float(input("mm,h="))
    b=float(input("mm,b="))
    ast=float(input("mm,受拉钢筋合力点至受拉边缘的距离ast="))
    asp=float(input("mm,受压钢筋合力点至受压边缘的距离asp="))
    h0=h-ast
    #界限受压区高度ksi_b
    ksi_b=round(0.8/(1 + fy / (Es*epsilon_cu)),3)
    #受压区高度x
    x=round(h0-math.sqrt(h0**2 - 2*(gamma_RE*M*(10**6) - fyp*Asp*(h0-asp)) / (a1*fc*b)),1)
    print('h0=',h0)
    print('ksi_b=',ksi_b)
    print('x=',x)
    if (x<=ksi_b*h0):
        #弯曲破坏时,截面的延性取决于受压区高度的大小,受压区高度越小,截面转动就越大,延性就越好
        print(x,"非抗震截面,<=ksi_b*h0",ksi_b*h0)
        print(x,"抗震端截面,一级x<=0.25h0",0.25*h0)
        print(x,"抗震端截面,二、三级x<=0.35h0",0.35*h0)        
    else:
        #超筋梁,脆性破坏
        print(x,">ksi_b*h0,截面过小!",ksi_b*h0)
    if (x>=2*asp):
        print(x,">=2*asp,混规6.2.10-4式",2*asp)
        As=(a1*fc*b*x+fyp*Asp)/fy
    else:
        print(x,"<2*asp,混规6.2.14条",2*asp)
        As=gamma_RE*M*(10**6) / (fy*(h - ast - asp))
    As=round(As,1)
    print('受拉筋面积As=',As)
    rho=round(As/(b*h)*100,3)
    print('另需满足最小配筋率;配筋率rho=',rho,'%')
#函数结束

#【b】已知As,Asp,求Mu
def given_as_asp_solve_mu():
    import math
    c_hrb()
    gamma_RE=float(input("抗震0.75,gamma_RE="))
    nst=float(input("受拉筋个数nst="))
    dst=float(input("受拉筋直径dst="))
    As=nst*0.25*3.14*(dst**2)
    nsp=float(input("受压筋个数nsp="))
    dsp=float(input("受压筋直径dsp="))
    Asp=nsp*0.25*3.14*(dsp**2)
    h=float(input("mm,h="))
    b=float(input("mm,b="))
    ast=float(input("mm,受拉钢筋合力点至受拉边缘的距离ast="))
    asp=float(input("mm,受压钢筋合力点至受压边缘的距离asp="))
    h0=h-ast
    #界限受压区高度ksi_b
    ksi_b=round(0.8/(1 + fy / (Es*epsilon_cu)),3)
    #受压区高度x
    x=(fy*As-fyp*Asp)/(a1*fc*b)
    print('h0=',h0)
    print('ksi_b=',ksi_b)
    print('x=',x)
    if (x<=ksi_b*h0):
        #弯曲破坏时,截面的延性取决于受压区高度的大小,受压区高度越小,截面转动就越大,延性就越好
        print(x,"非抗震截面,<=ksi_b*h0",ksi_b*h0)
        print(x,"抗震端截面,一级x<=0.25h0",0.25*h0)
        print(x,"抗震端截面,二、三级x<=0.35h0",0.35*h0)        
    else:
        x=ksi_b*h0
        print(x,"取x=ksi_b*h0",ksi_b*h0)
    if (x>=2*asp):
        print(x,">=2*asp,混规6.2.10-4式",2*asp)
        Mu=(a1*fc*b*x*(h0-x/2) + fyp*Asp*(h0-asp)) / gamma_RE/(10**6)
    else:
        print(x,"<2*asp,混规6.2.14条",2*asp)
        Mu=fy*As*(h - ast - asp) / gamma_RE/(10**6)
    Mu=round(Mu,3)
    print('极限抗弯承载力Mu=',Mu)
#函数结束

Primavera P6 主要工作流程

最近在学习markdown用mermaid做流程图,索性画一下Primavera P6的主要工作步骤以供参考。

~~~mermaid
graph TD
N1[01程序基础设置]
N2[02创建OBS]
N3[03创建EPS]
N4[04创建项目分类码<br />05创建项目]
N6[06加载项目分类码]
N7[07创建WBS]
N9[08创建作业分类码<br />09创建作业]
N10[10创建步骤<br />11确定工期<br />12限制条件<br />13建立逻辑关系<br />14加载作业分类码]
N15[15关键路径法进度计算]
N16[16进度分析]
N17[17创建RBS]
N18[18创建资源分类码<br />19创建资源]
N20[20加载资源分类码]
N21[21创建CBS]
N22[22费用估算]
N23[23加载资源]
N24[24加载其它费用]
N25[25加载费用科目]
N26[26资源&费用分析]
N27[27冻结目标计划]
N28[28项目发布&计划N]
N29[29更新进度]
N30[30更新资源&费用]
N31[31偏差分析]
N32[32计划调整]
TF1{调整?}
TF2{完工?}
S(开始) --> N1
N1 --> N2 --> N3
N3 --> N4 --> N6
N6 --> N7
N7 --> N22
N7 --> N9
N9 --> N10 --> N15
N15 --> N16 --> N27
N15 --> N26 --> N27
N1 --> N17
N17 --> N18 --> N20 --> N23
N1 --> N21 --> N25
N9 --> N24 --> N25
N9 --> N23 --> N25
N25 --> N15
N27 --> N28 --> N29 --> N31
N28 --> N30 --> N31 --> TF1 --否--> N28
TF1 --是--> N32 --> TF2 --否--> N27
TF2 --是--> E(结束)
~~~

效果如下: