将值分配给循环python中的实际索引值

问题描述 投票:0回答:1

我接下来的变量是List,float和numpy数组。

dt=list(range(1,12))   
c=18
limit=2.75
Energy=np.zeros(len(dt))  

我想在Numpy数组c=18中分配值Energy。但是,有条件。 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

您是否知道如何使其变得更好?谢谢!

python numpy loops indexing position
1个回答
0
投票

欢迎使用stackoverflow!

您的代码当前在不需要的地方使用了一个循环,并且在可以使用的地方没有使用一个循环。

进入您的代码:

for i in range(0,1): 

如果我们将其更改为:

for i in range(0,1): 
    print (i)

我们将得到结果0-它仅运行一次,因此无需循环-我的代码中未引用我,因此无需循环遍历。

您可以使用循环将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元素-1)必须等于限制,最后一个元素必须等于value_to_be_assigned%限制

最后,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
© www.soinside.com 2019 - 2024. All rights reserved.