【问题标题】:Cumulative sum of a numpy array and store each value into a new arraynumpy数组的累积和并将每个值存储到一个新数组中
【发布时间】:2023-03-10 00:50:01
【问题描述】:

我有一个 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

我的想法只是为数组中的每个项目编写一个 for 循环,但计算似乎是错误的。 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)

【问题讨论】:

    标签: python arrays pandas numpy


    【解决方案1】:

    使用内置函数cumsuma 是你的数组):

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

    更新: 基于 OP 在帖子上的编辑(t 是标量,MdM 是数组。请注意,python 索引是从零开始的,不是从一开始的):

    M(0) + (dM*t).cumsum()
    

    【讨论】:

    • 抱歉,不包括t
    • @hobbicon t 应该是什么?从您的代码和相关解释中不清楚。您能否编辑/评论它是什么?从代码看起来你将值乘以它,但从解释看来你想添加每个 t 索引?
    • t 是 10 的常数因子
    • 嗯,它似乎工作,但老实说,我不完全理解它。所以M(0) 显然是起始值,而 cumsum() 函数会遍历dM*t?
    • @hobbicon 是的,你明白了。 dM*tdM 中所有值与t 的简单乘法,cumsum 是累积和(您需要的总和)
    【解决方案2】:

    逐行遍历文件,并将当前行的值加上结果数组中前一个元素的值。我不是 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
    

    【讨论】:

      【解决方案3】:

      这不是最优雅的解决方案,但这样的事情会起作用:

      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)
      

      【讨论】:

      • 如何包含t 因素?像这样? array2[i] = np.sum(array[:i*t+1])
      【解决方案4】:

      一个优雅的解决方案是

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

      【讨论】:

        猜你喜欢
        • 2018-08-17
        • 1970-01-01
        • 2013-04-26
        • 2014-01-03
        • 1970-01-01
        • 1970-01-01
        • 2017-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多