2017-01-02 77 views
0

我有一個問題。我在Fortran編程一個數學計算程序。在那裏,我必須初始化一個隨機值數組。這些值必須正態分佈,平均值爲0,標準偏差爲1.如何將長python列表格式化爲Fortran多行數組?

我在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, & 
... 
... 
... 

我該如何去做這件事?

回答

0

使用配方在this answer的N值的組來分割你的列表中,那麼它只是一個通過羣體迭代的事情:

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

請注意,你必須重新命名list變量,以避免與內建列表類型衝突。

+0

這類作品....我不得不重寫這個python 2. 然而,這返回正確的格式,但一次4個副本。例如 例如。 '-0.431,0.582,-0.098,-1.875,' '-0.431,0.582,-0.098,-1.875,' '-0.431,0.582,-0.098,-1.875,' '-0.431, 0.582,-0.098,-1.875,' Wierd。現在怎麼辦? –

0

而不是使用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]) + ', &'