簡體   English   中英

如何將長長的python列表格式化為Fortran多行數組?

[英]How to format a long python list into a Fortran multi-line array?

我有個問題。 我正在用Fortran編寫數學計算程序。 在這里,我必須初始化一個隨機值數組。 這些值必須正態分布,平均值為0,標准差為1。

我在Python 2.7中執行了以下腳本,以生成900個這樣的值。

import numpy as np

mu, sigma = 0, 1.0
list = []

i = 0
while i < 901:
    s = np.random.normal(mu, sigma, None)
    list.append(format(s, '.3f'))
    i += 1

print list

這將返回以下列表:

['-1.403', '-1.498', '0.573', '-0.056', '-0.226', '-0.514', ..., ]

問題是我不能僅僅將其復制到我的Fortran代碼中,因為其中的值是通過以下方式編寫的:

DATA STR / 0.978,  -0.52 ,  -0.368,   1.69 ,  &   !Giving random values. Temperary solution for
          -1.48 ,   0.985,   1.475,  -0.098,  &   !random number generating, based on the normal law
          -1.633,   2.399,   0.261,  -1.883,  &
          -0.181,   1.675,  -0.324,  -1.029,  &
          -0.185,   0.004,  -0.101,  -1.187,  &
          -0.007,   1.27 ,   0.568,  -1.27 ,  &
           ... &
           ... &
           ... &

           /

這意味着我必須將Python列表的格式設置為:

NUM1, NUM2, NUM3, NUM4, &
XXXX, XXXX, XXXX, XXXX, &
...
...
...

我將如何去做呢?

使用此答案中的配方將您的列表分為N個值組,然后只需遍歷各組即可:

for group in grouper(4, lst):
    for value in group:
        print(list(group).join(', '))
    print('&')

請注意,您必須重命名list變量,以避免與內置列表類型沖突。

我沒有使用itertools,而是使用for循環拆分了列表,然后用另一個元素打印了每個元素。

import numpy as np


mu, sigma = 0, 1.0
alist = []

i = 0
while i < 900:
    s = np.random.normal(mu, sigma, None)
    alist.append(format(s, '.3f'))
    i += 1


new = []

for i in range(0, len(alist), 4):
    new.append(alist[i : i + 4])

for i in range(len(new)):
    print ', '.join(new[i]) + ', &'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM