Понимание вложенного списка для NumPy - PullRequest
0 голосов
/ 20 марта 2019

У меня есть проблема, которую я, похоже, не могу решить.

Я строю в массиве массива формы (100, 30) из строк файла (100 строк по 30 значений в каждой),и мне нужно превратить этот массив в форму (100,) со значениями в виде среднего значения n последних значений в каждой строке исходного массива.

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

Это то, что я до сих пор получил, это дает мне массив правильной формы, но с (я считаю) неправильными значениями.

def perf_n_last(n):
    a = np.array([np.mean([i for j in range(len(i)-1, len(i)-(n+1), -1)]) for i in np.loadtxt('myfile.txt')])
    print(a.shape) #outputs (100, )

Входные и выходные данные должны выглядеть следующим образом:

input_f = [[1. 2. 3. 4. 5.]
           [2. 3. 4. 5. 6.]
           [3. 4. 5. 6. 7.]]
#We assume n = 2
output_f = [4.5 5.5 6.5]

Я также открыт для предложений по списку фрагментов.Спасибо за помощь!

1 Ответ

3 голосов
/ 20 марта 2019

Если я правильно понимаю ваш вопрос, на самом деле это можно сделать очень быстро с помощью numpy, если предположить, что каждая строка в массиве 2d имеет одинаковую длину:

def perf_n_last(n):
    return np.loadtxt("myfile.txt")[:,-n:].mean(1)

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

...