【问题标题】:Fortran 90 to Python arrayFortran 90 到 Python 数组
【发布时间】:2016-05-05 18:45:41
【问题描述】:

如何将以下 Fortran 声明转换为 Python(numpy 数组)?

INTEGER, ALLOCATABLE::          I(:)
DOUBLE PRECISION, ALLOCATABLE:: A(:)
DOUBLE PRECISION, ALLOCATABLE:: B(:,:)
DIMENSION Z(*)
DIMENSION X(N)

【问题讨论】:

  • 为什么要投反对票?如果您不知道,请忽略或添加评论
  • 我不能代表反对者,但该代码实际上并没有任何事情。你特别不明白什么?
  • 我可以告诉你每一行在 Fortran 中的含义,但我基本上不能告诉你关于 Python 的任何内容......
  • 这个问题没有意义。 Python 不使用声明。您应该查找 allocate 语句并将其转换为 A = np.array...
  • 这不是编程的工作方式。您不能逐行翻译,您必须了解程序的整个部分是做什么的。但是您没有显示足够的代码。例如,如果没有适当的上下文,您的第四行就没有任何意义。

标签: numpy fortran


【解决方案1】:

要声明一个整数,只需像这样赋值:

i=1

要声明一个浮点数,像这样赋值:

a=1.0

对于numpy 数组最好提前知道大小:

b=np.zeros((100,100)) # a 100x100 array, initialized with zeros
x=np.ones(1000)   # a 100 array , initialized with ones

如果您不提前知道数组的大小,请分配一个空列表,如下所示:

xlist=[]

然后像这样填充列表(比如在循环内):

xlist.append(5.34) 

为什么这是首选方法,请参阅this SO question

您可以使用第二个循环制作列表列表,如以下乘法表示例:

aa=[]
for i in range(10):
     a=[]
     for j in range(10):
         a.append(i*j)
     aa.append(a)

当您完成创建列表(任意维度)并想要快速时,将它们转换为像这样的 numpy 数组

my2darray=np.array(aa) 

【讨论】:

  • 问题询问DIMENSION Z(*)这一行。对于 z 的类型和大小(或其他属性),我们能说些什么?
  • 另一位评论者已经指出,这句话本身没有意义。
猜你喜欢
  • 2016-12-15
  • 1970-01-01
  • 2013-06-09
  • 2015-08-07
  • 2010-10-24
  • 2017-09-14
  • 2013-06-14
  • 2012-06-04
  • 2015-03-14
相关资源
最近更新 更多