首页
默认分类
技术经验
工作学习
娱乐爱好
闲言碎语
更多
统计
关于
登录
1
李芒果空岛-1.20.1-发展记录-05
335 阅读
2
108第一届中国象棋比赛
267 阅读
3
“日晕“
260 阅读
4
Mac安装Homebrew
240 阅读
5
Win10安装mingw64配置最新版gcc与gfortran环境
239 阅读
Search
标签搜索
天文
Minecraft
李芒果空岛
macOS
空间物理学
数值计算
非线性最小二乘
typecho
Python
PTCG
GSL
gcc
迭代法
Fortran
Halo
朗谬尔波
Langmiur
环法自行车赛
Win10
Linux
Washy
累计撰写
72
篇文章
累计收到
2
条评论
首页
栏目
默认分类
技术经验
工作学习
娱乐爱好
闲言碎语
页面
统计
关于
管理后台
搜索到
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日
143 阅读
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日
127 阅读
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日
210 阅读
0 评论
0 点赞