问题描述
我有一个数组:
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))]