2012-02-09 103 views
1

我有一个方程式,我想要为每个元素(e0)执行一个名为'energy'的数组。然而,每个计算都需要循环定义范围内的一组值(i)。当我尝试将一个循环放入另一个循环时,它将返回一个空数组,而我想要一个与能量数组大小相同的数组。返回和空阵列

fp1 = [] 
for e0 in energy: 
    for i in range(elow, ehigh, stepsize): 
     fp1 = np.append(fp1, np.cumsum((2/np.pi) * ((mu(element, e0) * i/((e0 * e0)-)(i * i)))) * 2) 

所有这些都比较新,所以假设我完全忽略了一些东西。 为此使用Python 2.7。

干杯

+0

elow,ehigh , 一步的大小 ?如果elow> = eghigh,这只会生成一个[]列表。 – Bogdan 2012-02-09 15:34:53

+0

elo = 0,ehi = 900,stepsize = 2 – user1171835 2012-02-09 15:38:46

+0

你能证实你在这里使用Numpy吗?由于append为numpy数组返回一个数组,Python为Python列表返回None。 – 2012-02-09 15:56:48

回答

0

那么空的列表不应该发生的情况。但是,如果你在评论中说的是真的,那么你应该期待什么。例如:

elow = 2 
ehigh = 900 
stepsize = 2 
fp1 = [] 
energy = [1, 2, 3] 
for e0 in energy: 
    for i in range(elow, ehigh, stepsize): 
      fp1 = numpy.append(fp1, 15) 

fp1 
array([ 15., 15., 15., ..., 15., 15., 15.]) 
len(fp1) 
1347 

正如你所看到的,你不会得到一个相同长度的能量阵列。这是因为range(2, 900, 2)生成了从2 - > 898(449个元素)开始的列表。这是为能量中的每个元素生成的,并且计算结果将附加到fp1,因此您应该得到449 * 3 = 1347个元素作为结果。

我实在看不出,你会得到一个空列表其他结果比任何情况:

elow >= ehigh 

energy = [] 

stepsize < 0 

所以我的建议是在循环之前有权做所有这些值的打印/调试,也许试图更好地解释你想达到什么,因为就像我说的,即使这会起作用,你将不会得到与energy相同长度的输出,而是length = len(energy) * 449