我有下一个变量,它们是列表,浮点数和一个数值数组。
dt=list(range(1,12))
c=18
limit=2.75
Energy=np.zeros(len(dt))
我想在Numpy数组Energy
中赋值为c=18
。然而,有一个条件。Energy
向量中的值不能大于limit=2.75
,因此,由于c=18
大于limit=2.75
,因此应将其剪切为2.5
,并将其分配到循环的实际索引位置和向量Energy
的下一个索引位置,直到达到值18
。我写了这段代码,但它的效率并不高。
for i in range(0,1):
if c>limit:
tmp2=c-(limit)
if tmp2>(limit):
tmp3=tmp2-(limit)
if tmp3>limit:
tmp4=tmp3-(limit)
if tmp4>(limit):
tmp5=tmp4-(limit)
if tmp5>(limit):
tmp6=tmp5-(limit)
if tmp6>limit:
tmp7=tmp6-(limit)
if tmp7>(limit):
tmp8=tmp7-(limit)
else:
Energy[i]=limit
Energy[i+1]=limit
Energy[i+2]=limit
Energy[i+3]=limit
Energy[i+4]=limit
Energy[i+5]=limit
Energy[i+6]=tmp7
你有办法让它变得更好吗?谢谢!
发布于 2020-01-18 20:13:45
欢迎来到stackoverflow!
您的代码目前在不需要循环的地方使用循环,在可以使用的地方也不使用循环。
单步执行您的代码:
for i in range(0,1):
如果我们将其更改为:
for i in range(0,1):
print (i)
我们将得到结果0-它只运行一次,所以没有必要循环它-在你的代码中没有引用i,所以没有必要遍历它。
您可以使用循环将c分配给数组,但这并不是必需的,我将把它留给您自己作为练习。
它可以用一种不同的、更有效的方式来处理。
首先,当你赋值变量时,试着让它们具有描述性和可读性--你会花更多的时间回到代码上,而不是阅读它。
我不知道您描述的是什么系统,所以我只给出了通用名称:
将numpy导入为np
length_arrary=12
limit=2.75
value_to_be_assigned=18
energy_result=np.zeros(length_arrary)
现在我们真正要问的是两件事,value_to_be_assigned除以极限(整数)的次数和余数是多少。
Python对这个地板分割(//)和模数有两个操作,这两个操作给出:
11//5 = 2.0
1%5 = 1.0
因此我们知道数组的第一个元素( value_ to _ be _assigned //limit elements - 1)需要等于limit,而最后一个元素需要等于value_to_be_assigned% limit
最后,Python有一种简单的方法来访问列表中的元素-我们可以使用以下命令将前x个元素设置为等于一个值:
array[:x]=value
X只需要是一个整数。
把它们放在一起,我们得到:
filled_values=int(value_to_be_assigned//limit)
energy_result[:filled_values]=limit
energy_result[filled_values] = value_to_be_assigned % limit
我们可以检查一下
energy_result.sum() # gives us 18
https://stackoverflow.com/questions/59800255
复制相似问题