在处理big-fi时创建数组

2024-10-19 21:25:09 发布

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

这是我的第一篇文章,尽管我已经读了一段时间了。 我是Python初学者,需要你的帮助。 我正在处理一个非常大的文件(超过200万行),但我将向您展示一个小得多的示例(24行而不是74513行)。假设我有24行,每行有一个浮点数,在同一行上有3个数字,然后是24行,每行有3个数字,以此类推29次。你知道吗

56.71739
56.67950
56.65762
56.63320
56.61648
56.60323
56.63215
56.74365
56.98378
57.34681
57.78903
58.27959
58.81514
59.38853
59.98271
60.58515
-1.00000
56.09566
56.05496
56.02777
56.00158
55.98341
55.96830
55.99615
          1            1          1
56.34692
56.70977
57.15187
57.64234
58.17782
58.75118
59.34534
59.94779
-1.00000
55.47366
55.42963
55.39739
55.36958
55.35020
55.33404
55.36098
55.47148
55.71110
56.07384
56.51588
57.00632
57.54180
58.11517
58.70937
         2            1           1

使用前24行创建数组非常容易:

import numpy

def ttarray_tms (traveltimes):
    '''It defines the 3-D array, organized as I want.'''
    with open (traveltimes, 'r') as file_in:
        newarray = file_in.readlines()
        ttarray = np.array(newarray)
        ttarray.shape = (2,3,4)
        ttarray = np.swapaxes(ttarray,1,2)
        ttarray = np.swapaxes(ttarray,0,2)
        return ttarray

请注意:每个数字之间没有空行。这是一个简单的冒号向量文件。不知什么原因,我不得不这样发帖。 我想要的是基本上得到29个数组,所以我应该在24行上循环得到一个数组,然后在接下来的24行上再次循环(用3个数字跳行,我真的不需要它们)得到另一个数组,以此类推。我认为我的主要问题是如何跳过3个数字的行,然后重新开始一个新数组的新循环。你知道吗

你有什么好主意吗?你知道吗

非常感谢!你知道吗


Tags: 文件inasnp文章数字数组array
2条回答

你可以用^{}读一行24次,然后用另一行readline()跳过一行,以此类推。你知道吗

使用您的代码:

import numpy

def mk_array(elems):
    '''Makes the nparray from an array of 24 numbers'''
    ttarray = np.array(elems) # perhaps [ float(a) for a in elems ] is needed
    ttarray.shape = (2,3,4)
    ttarray = np.swapaxes(ttarray,1,2)
    ttarray = np.swapaxes(ttarray,0,2)
    return ttarray

def ttarray_tms(traveltimes):
    '''It defines the 3-D array, organized as I want.'''
    arrays = list()
    with open (traveltimes, 'r') as file_in:
        ret = "." # force the loop
        while ret != "":
            newarray = [ file_in.readline() for i in range(24) ]
            ret = file_in.realine()
            if ret != "": # avoid an empty array
                ttarray = mk_array(newarray)
                arrays.append(ttarray)       
    return arrays

未测试。你知道吗

三个集合行中的数字遵循递增模式。那么,为什么不把最后两个数字放在两个变量中,然后如果这三个数字对应于这个模式,就把它们去掉,然后继续呢?这是一种滑动窗口方法。你知道吗

相关问题 更多 >