fealpy
fealpy copied to clipboard
关于argv运行的问题咨询
魏老师好,请问examples有些例子出现很多argv的 直接运行时不可行,应该输入什么命令才可以,为什么需要这样?谢谢
p = int(sys.argv[1]) n = int(sys.argv[2]) maxit = int(sys.argv[3])
sys.argv[]
中其实就是一个列表,里面是存放的是程序外部输入的参数,例如 example/PoissonFEMWithDirichletBC_example.py
,运行时可以用 >python PoissonFEMWithDirichletBC_example.py 1 2 3 2
,其中 1 2 3 2
分别对应
p = int(sys.argv[1])
n = int(sys.argv[2])
maxit = int(sys.argv[3])
d = int(sys.argv[4])
如果你直接在 IDE 下运行,可以注释掉上面的,改为
p = 1 # 多项式阶数
n = 2 # 初始网格加密次数
maxit = 3 #
d = 2 # 空间维数
sys.argv[]
中其实就是一个列表,里面是存放的是程序外部输入的参数,例如example/PoissonFEMWithDirichletBC_example.py
,运行时可以用>python PoissonFEMWithDirichletBC_example.py 1 2 3 2
,其中1 2 3 2
分别对应p = int(sys.argv[1]) n = int(sys.argv[2]) maxit = int(sys.argv[3]) d = int(sys.argv[4])
如果你直接在 IDE 下运行,可以注释掉上面的,改为
p = 1 # 多项式阶数 n = 2 # 初始网格加密次数 maxit = 3 # d = 2 # 空间维数
好的。谢谢,直接在IDE下可以,但是另一种方式 会显示类似 ImportError: No module named mpl_toolkits.mplot3d 这种,您清楚是什么原因导致么? 直接在IDE里改了p n maxi d是ok的
如果直接在终端下命令行运行的话,要看你调用的是哪个 python 了,比如,你是通过 Anaconda (虚拟环境) 安装的 fealpy,那么你需要先激活 fealpy 这个虚拟环境,然后在此环境下 python fealpyexample.py
。你可以查看你的 IDE 调用的是哪个路径下的 python,然后可以在终端下输入绝对路径下的 python 也是可以的。
如果直接在终端下命令行运行的话,要看你调用的是哪个 python 了,比如,你是通过 Anaconda (虚拟环境) 安装的 fealpy,那么你需要先激活 fealpy 这个虚拟环境,然后在此环境下
python fealpyexample.py
。你可以查看你的 IDE 调用的是哪个路径下的 python,然后可以在终端下输入绝对路径下的 python 也是可以的。
好的,谢谢
这些例子的命令行的参数处理的比较偷懒,我后面会抽时间用 argparse 这个包重新改造一下这些例子,增加更多的调用说明。
这些例子的命令行的参数处理的比较偷懒,我后面会抽时间用 argparse 这个包重新改造一下这些例子,增加更多的调用说明。
谢谢魏老师
@yhhan1220 我更新了一个算例 example/PoissonFEMWithDirichletBC_example.py
的参数处理方式, 现在用了 argparse
这个包, 加入了参数说明,用起来应该更清楚一点了。用 --help
或者 -h
参数就可以查看帮助信息。
$ python3 PoissonFEMWithDirichletBC_example.py --help
usage: PoissonFEMWithDirichletBC_example.py [-h] [--degree DEGREE] [--dim DIM] [--nrefine NREFINE] [--maxit MAXIT]
单纯形网格(三角形、四面体)网格上任意次有限元方法
optional arguments:
-h, --help show this help message and exit
--degree DEGREE Lagrange 有限元空间的次数, 默认为 1 次.
--dim DIM 模型问题的维数, 默认求解 2 维问题.
--nrefine NREFINE 初始网格加密的次数, 默认初始加密 4 次.
--maxit MAXIT 默认网格加密求解的次数, 默认加密求解 4 次
@yhhan1220 我更新了一个算例
example/PoissonFEMWithDirichletBC_example.py
的参数处理方式, 现在用了argparse
这个包, 加入了参数说明,用起来应该更清楚一点了。用--help
或者-h
参数就可以查看帮助信息。$ python3 PoissonFEMWithDirichletBC_example.py --help usage: PoissonFEMWithDirichletBC_example.py [-h] [--degree DEGREE] [--dim DIM] [--nrefine NREFINE] [--maxit MAXIT] 单纯形网格(三角形、四面体)网格上任意次有限元方法 optional arguments: -h, --help show this help message and exit --degree DEGREE Lagrange 有限元空间的次数, 默认为 1 次. --dim DIM 模型问题的维数, 默认求解 2 维问题. --nrefine NREFINE 初始网格加密的次数, 默认初始加密 4 次. --maxit MAXIT 默认网格加密求解的次数, 默认加密求解 4 次
谢谢魏老师,已更新
老师我有如下的一段代码
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 21 20:34:16 2021
@author: Administrator
"""
import sys
import numpy as np
import matplotlib.pyplot as plt
from fealpy.mesh import MeshFactory as MF
from fealpy.functionspace import LagrangeFiniteElementSpace
p = int(sys.argv[1])
box = [0, 1, 0, 1]
mesh = MF.boxmesh2d(box, nx=1, ny=1, meshtype='tri')
space = LagrangeFiniteElementSpace(mesh, p=p)
bc = np.array([[1/3, 1/3, 1/3]], dtype=np.float64)
phi = space.basis(bc)
gphi = space.grad_basis(bc)
print('bc', bc.shape)
print('phi', phi.shape)
multiIndex = space.dof.multiIndex
fig = plt.figure()
axes = fig.gca()
mesh.add_plot(axes)
mesh.find_node(axes,showindex=True)
mesh.find_cell(axes,showindex=True)
报错信息如下:
Traceback (most recent call last):
File "bc的应用.py", line 15, in <module>
p = int(sys.argv[1])
IndexError: list index out of range
我把p = int(sys.argv[1])注释掉后,将p=p改为p=3可以得到正确的结果. 老师,我还想请问一下p = int(sys.argv[1])的方便之处在哪里!
你不改程序,就可以在命令行里测试不同的 p
pthon3 filename.py 3 # 测试 3 次的例子
------------------ Original ------------------ From: @.>; Date: Wed, Jul 21, 2021 09:19 PM To: @.>; Cc: @.>; @.>; Subject: Re: [weihuayi/fealpy] 关于argv运行的问题咨询 (#35)
老师我有如下的一段代码
-- coding: utf-8 -- """ Created on Wed Jul 21 20:34:16 2021 @author: Administrator """ import sys import numpy as np import matplotlib.pyplot as plt from fealpy.mesh import MeshFactory as MF from fealpy.functionspace import LagrangeFiniteElementSpace p = int(sys.argv[1]) box = [0, 1, 0, 1] mesh = MF.boxmesh2d(box, nx=1, ny=1, meshtype='tri') space = LagrangeFiniteElementSpace(mesh, p=p) bc = np.array([[1/3, 1/3, 1/3]], dtype=np.float64) phi = space.basis(bc) gphi = space.grad_basis(bc) print('bc', bc.shape) print('phi', phi.shape) multiIndex = space.dof.multiIndex fig = plt.figure() axes = fig.gca() mesh.add_plot(axes) mesh.find_node(axes,showindex=True) mesh.find_cell(axes,showindex=True)
报错信息如下: Traceback (most recent call last): File "bc的应用.py", line 15, in <module> p = int(sys.argv[1]) IndexError: list index out of range
我把p = int(sys.argv[1])注释掉后,将p=p改为p=3可以得到正确的结果. 老师,我还想请问一下p = int(sys.argv[1])的方便之处在哪里!
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.