Накопительная сумма массива numpy и сохранение каждого значения в новом массиве - PullRequest
1 голос
/ 10 июля 2020

У меня есть numpy массив fs путем чтения из файла * .csv. Его размер (606,) и тип данных - float64.

Пример: мои необработанные данные

i   M(i)    dM(i)
1   0.0012  0.00013
2           0.00015
3           0.00016
4           0.00018

Теперь каждый элемент моего массива должен быть рассчитан следующим образом: M(i) = M(i-1) + dM(i-1)*t.

t - постоянный коэффициент 10.

M(2) будет M(2) = M(1) + dM(1)*t = 0.0012 + 0.00013*10 = 0.0025 M(3) будет M(3) = M(2) + dM(2)*t = 0.0025 + 0.00015*10 = 0.004

Я рассчитал некоторые значения вручную.

i   M(i)    dM(i)
1   0.0012  0.00013
2   0.0025  0.00015
3   0.004   0.00016
4   0.0056  0.00018

Моя идея заключалась в том, чтобы просто написать для l oop для каждого элемента в массиве, но вычисления кажутся неверными. fs - это массив, а t - определенный временной интервал. t является постоянным и имеет значение 10

#   Ms(t)
def mass(t, fs):
    M_st = 0
    for i in fs
        M_st = M_st + i*t
    return M_st
sum = mass(10,fs)

Ответы [ 4 ]

0 голосов
/ 10 июля 2020

Используйте для него встроенную функцию cumsum (a - ваш массив):

a.cumsum()
#[ 1  4  8 13 19 26]

UPDATE : на основе редактирования OP на post (t - скаляр, а M и dM - массивы. Обратите внимание, что python индексация отсчитывается от нуля, а НЕ отсчитывается от единицы):

M(0) + (dM*t).cumsum()
0 голосов
/ 10 июля 2020

это не самое элегантное решение, но сработает что-то вроде этого:

import numpy as np
array = np.array([1, 2, 3, 4, 5, 6])
array2 = np.zeros(len(array))
for i in range(len(array)):
    if i == 0:
        array2[i] = array[i]
        
    array2[i] = np.sum(array[:i+1]) 
print(array2)
0 голосов
/ 10 июля 2020

одно изящное решение будет

m = arr[0]
temp = np.tril(np.ones([m, m]))

new_arr = temp @ arr
0 голосов
/ 10 июля 2020

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

def create_sum_array(input_arr, length): 
   temp_arr = []
   for i in range(length):
     if(temp_arr = []):
       temp_arr.append(input_arr[i])
     else:
       temp_arr.append(temp_arr[i-1] + input_arr[i])
   return temp_arr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...