在二维数组中排列不同数量的浮点

2024-10-05 12:18:35 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我对Python是一个新手,所以请原谅我,如果我没有看到树木的树木。我的问题是如何读取一个庞大的浮点数文件,并将它们存储在一个数组中,以便进行快速的数学后处理。你知道吗

假设该文件类似于:

!!
    -3.2297390   0.4474691   3.5690145   3.5976372   6.9002712   7.7787466  14.2159269  14.3291490
    16.7660723  17.1258704  18.9469059  19.1716808  20.0700721  21.4088414
    -3.2045361   0.4123081   3.5625981   3.5936954   6.8901539   7.7543415  14.2764611  14.3623976
    16.7955934  17.1560337  18.9527369  19.1251184  20.0700709  21.3515145
    -3.2317597   0.4494166   3.5799182   3.6005429   6.8838705   7.7661897  14.2576455  14.3295731
    16.7550357  17.0986678  19.0187779  19.1687722  20.0288587  21.3818250
    -3.1921346   0.3949598   3.5636878   3.5892085   6.8833690   7.7404542  14.3061281  14.3855389
    16.8063645  17.1697110  18.9549920  19.1134580  20.0613223  21.3196066

这里有4个(nb)块,每个块有14个(nk)浮点数。我希望它们被安排在一个数组元素[nb][nk]中,这样我就可以很容易地访问某些浮动块。你知道吗

我觉得应该是这样的,但一点用都没有:

nb=4
nk=14

with open("datafile") as file:
    elements = []
    n = 0    
    while '!!' not in file: 
            while n <= (nb-1):
            elements.append([])
            current = map(float,file.read().split())  # here I would need something to assure only 14 (nk) floats are read in
            elements[n].append(current)
            n += 1

print(elements[0][1])

如果有什么想法和建议就好了。谢谢!你知道吗

编辑:

这里是一个数据文件,其中数字紧跟在后面,在块nb后面没有明显的分隔符。这里是nb=2和nk=160。如何在每160个数字之后拆分读入浮点?你知道吗

!!
 -7.2578105433   -7.2578105433   -6.7774609392   -6.7774609392   -6.3343986693   -6.3343986693   -5.8537216826   -5.8537216826
 -5.6031029888   -5.6031029888   -2.9103190893   -2.9103190893   -1.7962279174   -1.7962279174   -0.8136720023   -0.8136720023
 -0.1418500769   -0.1418500769    2.9923464558    2.9923464558    3.5797768050    3.5797768050    3.8793240270    3.8793240270
  4.0774192689    4.0774192689    4.2378755781    4.2378755781    4.2707165126    4.2707165126    4.3290523910    4.3290523910
  4.4487102661    4.4487102661    4.5341883539    4.5341883539    4.7946098470    4.7946098470    4.9518205998    4.9518205998
  4.9592549825    4.9592549825    5.1648268937    5.1648268937    5.2372127454    5.2372127454    5.9377062691    5.9377062691
  6.2971992823    6.2971992823    6.6324702419    6.6324702419    6.7948808733    6.7948808733    7.0835270703    7.0835270703
  7.6252686579    7.6252686579    7.7886279100    7.7886279100    7.8514022664    7.8514022664    7.9188180854    7.9188180854
  7.9661386138    7.9661386138    8.2830991934    8.2830991934    8.4581462733    8.4581462733    8.5537201519    8.5537201519
 10.2738010533   10.2738010533   11.4495306517   11.4495306517   11.4819579346   11.4819579346   11.5788238984   11.5788238984
 11.9411469341   11.9411469341   12.5006172267   12.5006172267   12.5055546075   12.5055546075   12.6659410418   12.6659410418
 12.8741094000   12.8741094000   12.9560279595   12.9560279595   12.9780521671   12.9780521671   13.2195973082   13.2195973082
 13.2339969658   13.2339969658   13.3594047155   13.3594047155   13.4530024795   13.4530024795   13.4556342387   13.4556342387
 13.5784994631   13.5784994631   14.6887369915   14.6887369915   14.9019726334   14.9019726334   15.1279383300   15.1279383300
 15.1953349879   15.1953349879   15.3209538297   15.3209538297   15.4042612992   15.4042612992   15.4528348692   15.4528348692
 15.4542742538   15.4542742538   15.5291462589   15.5291462589   15.5415591416   15.5415591416   16.0741610117   16.0741610117
 16.1117432607   16.1117432607   16.3566675522   16.3566675522   17.7569123657   17.7569123657   18.4416346230   18.4416346230
 18.9525843134   18.9525843134   19.0591624486   19.0591624486   19.1069867477   19.1069867477   19.1853525353   19.1853525353
 19.4020021909   19.4020021909   19.4718240723   19.4718240723   19.6384650104   19.6384650104   19.6919638323   19.6919638323
 19.7044699790   19.7044699790   19.8851141335   19.8851141335   20.6132283388   20.6132283388   21.4074471478   21.4074471478
 -7.2568288331   -7.2568280628   -6.7765483088   -6.7765429702   -6.3336003082   -6.3334841531   -5.8529872639   -5.8528369047
 -5.6024822566   -5.6024743589   -2.9101060346   -2.9100930470   -1.7964872791   -1.7959333994   -0.8153333579   -0.8144924713
 -0.1440078470   -0.1421444935    2.9869228390    2.9935342026    3.5661875018    3.5733148387    3.8777649741    3.8828300867
  4.0569348321    4.0745074351    4.2152251981    4.2276050415    4.2620483420    4.2649182323    4.3401804124    4.3402590222
  4.4446178512    4.4509411587    4.5139270348    4.5526439516    4.7788285567    4.7810706248    4.9282976775    4.9397807768
  4.9737752749    4.9900180286    5.1456209436    5.1507667583    5.2528363215    5.2835144984    5.9252188817    5.9670441193
  6.2699491148    6.3270140700    6.5912060019    6.6576016532    6.7976670773    6.7982056614    7.0789050974    7.1023337244
  7.6182108739    7.6309688587    7.7678148773    7.7874194913    7.8544608005    7.8594983757    7.9019395451    7.9100447766
  7.9872550937    7.9902791771    8.2617740182    8.3147140843    8.4533756827    8.4672364683    8.5556163680    8.5558640539
 10.2756173692   10.2760227976   11.4344757209   11.4355375519   11.4737803653   11.4760186102   11.5914333288   11.5953932241
 11.9369518613   11.9380900159   12.4973099542   12.5002401499   12.5030167542   12.5031963862   12.6629548222   12.6634150863
 12.8719844312   12.8728126622   12.9541436501   12.9568445777   12.9762780998   12.9764840239   13.2074024551   13.2108294169
 13.2279146175   13.2308902307   13.3780648962   13.3839050348   13.4634576072   13.4650575047   13.4701414823   13.4718238883
 13.5901622459   13.5971076111   14.6735704782   14.6840793519   14.8963924604   14.8968395615   15.1163287408   15.1219631271
 15.1791724308   15.1817299995   15.2628531102   15.3027136606   15.3755066968   15.3802521520   15.3969012144   15.4139294088
 15.5131322524   15.5315039463   15.5465532500   15.5629105034   15.5927166831   15.5966393750   16.0841067052   16.0883417123
 16.1224821534   16.1226510159   16.3646268213   16.3665839987   17.7654543366   17.7657216551   18.4305335335   18.4342292730
 18.9110142692   18.9215889808   18.9821593138   18.9838270736   19.1633959849   19.1637558341   19.2040877093   19.2056062802
 19.3760597529   19.3846323861   19.4323552578   19.4329488797   19.6494790293   19.6813374885   19.6943820824   19.7202356536
 19.7381237231   19.7414645409   19.9056461663   19.9197428869   20.6239183178   20.6285756411   21.4127637743   21.4128909767

Tags: 文件inread数字数组elementscurrentfile
1条回答
网友
1楼 · 发布于 2024-10-05 12:18:35

这应该起作用:

elements = []
with open("datafile") as file:
    next(file)
    for line in file:
        elements.append([float(x) for x in line.split()])

next(line)读取第一行。然后for line in file:遍历所有其他行。列表理解[float(x) for x in line.split()]遍历被空格分割的行中的所有条目。最后,elements.append()将这个列表附加到elements,它成为一个列表列表,您可以调用一个2D数组。你知道吗

访问第一行中的第一个条目:

>>> elements[0][0]
-3.229739

或最后一行的最后一个条目:

>>> elements[3][13]
21.319606

或者:

>>> elements[-1][-1]
21.319606

更新

这会将文件读入列表列表,而不将换行符视为特殊的:

nb = 2
nk = 160

with open("datafile") as fobj:
    all_values = iter(x for x in fobj.read().split())
    next(all_values)
    elements = []
    for x in range(nb):
        elements.append([float(next(all_values)) for counter in range(nk)])

如果您喜欢嵌套列表理解:

with open("datafile") as fobj:
    all_values = iter(x for x in fobj.read().split())
    next(all_values)
    elements = [[float(next(all_values)) for counter in range(nk)] for x in range(nb)]

相关问题 更多 >

    热门问题