python将每个索引处的数组中的所有接下来的n个值相加

问题描述

我有一个数组:

my_array = [1、13、6、100、12、23、45] 并希望创建一个新数组,该数组的my_array中的每个索引都是3个下一个索引值的总和

summed_array = [119,118,135,80,68,45,0] 我尝试了类似np.cumsum的东西,但是这个累积值

import numpy as np

sum_value = 0

my_array = [1,13,6,100,12,23,45]
summed_array = [0,0]
print(len(my_array))
for ind,i in enumerate(my_array):
    if ind+3< len(my_array):
        summed_array[ind] =my_array[ind+1]+my_array[ind+2]+my_array[ind+3]
    elif ind+2 < len(my_array):
         summed_array[ind] =my_array[ind+1]+my_array[ind+2]
    elif ind+1 < len(my_array):
        summed_array[ind]=my_array[ind+1]
    else:
        summed_array[ind] = 0
print(summed_array)  ``` 

解决方法

这应该使用slices来解决。

import numpy as np

sum_value = 0

my_array = [1,13,6,100,12,23,45]
summed_array = [0,0]
n = 3;
print(len(my_array))
for i in range(len(summed_array)):
    summed_array[i] = sum(my_array[i+1:i+1+n])
print(summed_array)
,

a为数组:

>>> c = a.cumsum()
>>> np.concatenate((c[3:],[a.sum()] * 3)) - c
array([119,118,135,80,68,45,0])
,

您也可以通过列表理解来做到这一点:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    getWindow().setStatusBarColor(Color.parseColor("#1f1f1d"));
    getWindow().setEnterTransition(null);
    setContentView(R.layout.activity_login);
}

@Override
public void onBackPressed() {
    finish();
}

通过这种方式,无需声明sum_array = [ sum(my_array[pos+1:pos+4]) for pos in range(len(my_array)) ] ,因为它将始终已经以正确的大小创建。

编辑: 修复了“下3个值”,因为我一开始还没有意识到。

,

如果要尽量减少执行的加法运算,最好有一个指针,以便为每个索引加减一次,而不是加3次。但是,您可能会发现其他解决方案比这更理想。如果是这样,请告诉我:)让a为您的数组。

# Initialize sum array sa with first index
val = sum(a[1:4])
sa = [val]
i = 1

# Get sum for all except last 3 indices
for i in range(1,len(a) - 3):
  val = val + a[i + 3] - a[i]
  sa.append(val)

# Account for the last 3 indices
while i < len(a):
  val -= a[i]
  sa.append(val)
  i += 1

# sa is the array needed at this point

请注意,空数组当前将返回[0]。如果您打算返回一个空数组,那将是一个边缘情况,可以通过开头的if语句来处理

,

可以做到

a = my_array
summed_array= [sum(a[i:i+3]) for i in range(len(a))]

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...