Добавление строк в массив Numpy без потери предыдущих данных, сохраненных

Обновить

March 2019

Просмотры

518 раз

1

Я чтение данных из файла и извлечения информации , что я хочу от него, как поплавки. Я затем хранить эти данные во временный список и использовать , vstackчтобы попытаться поместить данные в массив с каждой строкой быть новые данные, которые обрабатываются.

for line in lines:
    if line.find('GPS')!=-1:
        funcGPS(line)
    if line.find('-----')!=-1:
        MasterArray = numpy.vstack(temp)
        temp = []
        #print MasterArray
    if line.find('SERVO')!=-1:
        funcSERVO(line)

Это, как я пытаюсь скопировать данные в массив. Я успешно извлечение данных и после извлечения данных , полученных я хочу добавить данные в массив. В настоящее время он копирует данные по предыдущим данным , когда я построю на MasterArray. Есть в любом случае сделать это без конкретно о том , что размер MasterArrayесть? Я не хочу , чтобы ограничить объем данных , которые могут быть получены.

Спасибо!

1 ответы

2

Growing an array in a loop is considered bad practice. If you know the final size, or a reasonable upper limit, of the array it's best to pre-allocate the array and then fill it. If you don't know the final size you can often use a temporary list and convert it to an array after the loop. This is not unique to numpy, you'll see similar usage patterns in matlab and c programs.

Do something like this if you know the final size of the array or a reasonable upper limit.

N = 100
array = np.zeros(100)
count = 0
for line in file:
    array[count] = ...
    count += 1
 array = array[:count] # Or maybe array[:count].copy()

or something like this if you don't.

temp = []
for line in file:
    temp.append(...)
array = np.array(temp)