首页
统计
关于
Search
1
Win10安装mingw64配置最新版gcc与gfortran环境
603 阅读
2
李芒果空岛-1.20.1-发展记录-05
577 阅读
3
108第一届中国象棋比赛
535 阅读
4
Savitzky-Golay滤波器原理-01
530 阅读
5
史瓦西黑洞最内稳定圆轨道计算
496 阅读
默认分类
技术经验
工作学习
娱乐爱好
闲言碎语
登录
Search
标签搜索
天文
Minecraft
李芒果空岛
空间物理学
macOS
数值计算
非线性最小二乘
typecho
Python
GSL
gcc
迭代法
Fortran
Halo
朗谬尔波
Langmiur
环法自行车赛
短波通信
PTCG
Win10
Washy
累计撰写
76
篇文章
累计收到
1
条评论
首页
栏目
默认分类
技术经验
工作学习
娱乐爱好
闲言碎语
页面
统计
关于
搜索到
3
篇与
的结果
2024-05-21
Win10配置Python环境及安装apexpy包
0 前言 之前一直使用Mac办公,今天因为工作需求需要在Windows上运行之前写的代码,在安装apexpy包时,遇到了不少问题,经过一番折腾,发现是gfortran和Python版本问题导致的,在此记录下。 1 安装Python 目前(2024-05)最新的Python版本为3.12.3,由于apexpy包还没有完全支持最新版本,所以需要使用相对落后的版本,经测试发现3.10.11版本可正常使用 前往Python官网下载3.10.11版本: 64位:Windows installer (64-bit) 32位:Windows installer (32 -bit) 下载完成后,双击安装包,勾选安装界面的两个复选框,点击安装(建议安装在默认路径) 使用win+R快捷键,输入cmd,点击【确定】进入终端 输入python --version,打印Python 3.10.11则安装成功。如果版本号不对,可能是之前安装过python,可选择卸载其他版本或创建新的运行环境(网上自行搜索教程,建议使用必应搜索,非常不推荐使用百度) 输入pip list查看当前已安装的包 2 安装apexpy包 apexpy包需要有gcc和gfortran的运行环境,可参考Win10安装mingw64配置最新版gcc与gfortran环境博客 使用win+R快捷键,输入cmd,点击【确定】进入终端 输入pip install apexpy,等待安装结束即可 该包安装完成后,会顺带安装numpy包 现在的程序还需要使用netCDF4、scipy、matplotlib 同样在终端中使用pip install <package>进行安装,将<package>改为对应包的名称即可 3 安装编辑器 此处推荐使用Visual Studio Code,可前往官网进行下载安装 安装完成后,点击左侧【扩展】图标 搜索Chinese (Simplified) (简体中文) ,安装第一个搜索结果 搜索python,安装第一个搜索结果 搜索Jupyter,安装第一个搜索结果 一般来说安装上面三个扩展就能够正常运行代码了,如有其他需求也可自行搜索安装 4 后记 涉及到fortran的东西,总是存在一堆奇怪的问题,害我折腾了这么久。
2024年05月21日
334 阅读
0 评论
0 点赞
2023-08-31
Mac安装python及修改镜像源
0 前言 以前在Windows电脑上都是使用Anaconda管理python,转到Mac电脑后,由于Anaconda对M1芯片没有完美支持,在某些时候用起来会出问题,后来使用mini-forger进行替代。现在发现可以直接使用brew命令安装,便尝试一下。 1 安装python 安装Homebrew,可参考上一个博客 使用如下命令安装python 3.10版本 brew install python@3.10 使用vim打开~/.zprofile文件,并添加环境变量 # 打开文件 vim ~/.zprofile # 在文件最后添加如下命令 export PATH="/opt/homebrew/opt/python@3.10/libexec/bin:$PATH" 在终端中输入python --version,若能成功打印版本号,则安装成功 2 更改镜像源 使用上述方法安装成功后,安装其他包时,默认使用官方源,速度会很慢,因此需要更改为国内源 进入~/.pip/文件夹,如果不存在则使用如下命令新建文件夹 mkdir ~/.pip 使用如下命令打开~/.pip/pip.conf配置文件,并添加如下内容,然后保存退出 # 打开文件 vim ~/.pip/pip.conf # 在文件中添加如下内容 [global] timeout = 6000 index-url = https://pypi.tuna.tsinghua.edu.cn/simple trusted-host = pypi.tuna.tsinghua.edu.cn 国内镜像源 https://pypi.tuna.tsinghua.edu.cn/simple #清华 http://mirrors.aliyun.com/pypi/simple/ #阿里云 https://pypi.mirrors.ustc.edu.cn/simple/ #中国科技大学 http://pypi.hustunique.com/ #华中理工大学 http://pypi.sdutlinux.org/ #山东理工大学 http://pypi.douban.com/simple/ #豆瓣 在终端输入如下命令更新pip python -m pip install --upgrade pip 参考 pip更换成国内镜像的方法(永久和暂时)——经验贴
2023年08月31日
284 阅读
0 评论
0 点赞
2023-05-27
使用Python调用Fortran程序
1 前言 网上关于Python调用Fortran程序的方法通常分为三种:1)基于f2py;2)生成动态链接库;3)生成可执行文件。 其中第1种方法在涉及到“祖传”代码时,通常会出现各种报错;第3种方法在进行数据传递时基本只能通过操作文件的方式,很不方便。 由于涉及Fortran程序时,一般都逃不开“祖传”代码,因此本文将介绍最为稳定可靠的第2种方法。 2 方法详情 2.1 示例代码 新建test01.f90文件,创建子例程sub_test01以及函数func_test01,详细内容如下 subroutine sub_test01(x,y,z) bind(C,name="sub_test01") use iso_c_binding real(c_double), intent(in), value :: x,y real(c_double), intent(out) :: z(2) z(1) = x + x z(2) = y*y end subroutine sub_test01 function func_test01(x,y) result(z) bind(c,name="func_test01") use iso_c_binding real(c_double), intent(in), value :: x,y real(c_double) :: z z = x + y end function func_test01 bind:用于声明外部调用时子例程/函数名称 iso_c_binding:Fortran自带的模组,必须引用 intent:声明变量属性,输入为in,输出为out,即是输入也是输出为inout c_double:变量类型,real对应c_double,integer对应c_int value:输入变量为单个值时,需添加此标记 2.2 生成动态链接库 与正常编译相比增加-shared,生成后缀为.so的文件,如下 gfortran -shared test01.f90 -o test01.so 如果此步骤报错recompile with -fPIC,则在-shared后加上-fPIC。 2.3 使用Python调用 调用sub_test01子例程,需要引用ctypes和numpy,示例代码如下 import ctypes as ct import numpy as np # 加载动态链接库 fortlib = ct.CDLL('test01.so') # 引用sub_test01子例程 f_sub = fortlib.sub_test01 # 声明变量类型 f_sub.argtypes = [ct.c_double, ct.c_double, ct.POINTER(ct.c_double)] # 输入变量赋值 x = ct.c_double(3) y = ct.c_double(4) # 输出变量初始化 z = np.ones(2) z_p = z.ctypes.data_as(ct.POINTER(ct.c_double)) # 调用sub_test01子例程 f_sub(x,y,z_p) print(z) 使用ctypes.CDLL(<so name>)加载动态链接库,其中<so name>为上一节生成的动态链接库名称 子例程的引用名称为上一节bind中name定义的名称 argtypes用于声明变量类型,其中ctypes.POINTER表示指针。当变量为单个值(Fortran代码中value)时,声明为相应类型;当变量为数组(或输出变量,即intent(out))时,声明为指针 ctypes.c_double(<value>),其中<value>为变量的值 打印结果为[6. 16.] 调用func_test01函数,与子例程调用方式基本相同,示例代码如下 import ctypes as ct # 加载动态链接库 fortlib = ct.CDLL('test01.so') # 引用sub_test01子例程 f_sub = fortlib.func_test01 # 声明变量类型 f_sub.argtypes = [ct.c_double, ct.c_double] # 声明结果类型 f_sub.restype = ct.c_double # 输入变量赋值 x = ct.c_double(3) y = ct.c_double(4) # 调用sub_test01子例程 z = f_sub(x,y) print(z) restype声明返回值的类型 打印结果为7.0 参考 python调用fortran的3种形式【f2py,动态链接库,os命令】 How to Call Fortran from Python Using Python as glue
2023年05月27日
373 阅读
0 评论
0 点赞