2016-02-12 70 views
1

最接近的值我有以下阵列:如何找到阵列

y_new = [0.0057602140000000005, nan, nan, nan, nan, nan, 0.0057104540000000002, nan, 0.0056821390000000001, nan, nan, nan, nan, nan, nan, 0.0056911319999999998, nan, nan, nan, nan, nan, 0.0054902060000000001, nan, nan, nan, nan, nan, nan, 0.0053461740000000004, nan, nan, nan, nan, 0.0055180319999999991, nan, nan, nan, nan, nan, nan, nan, 0.0051784170000000003, nan, nan, nan, nan, nan, nan, 0.0051544399999999997, nan, nan, nan, nan, nan, nan, 0.005136781, nan, nan, 0.0051989519999999997, nan, nan, nan, nan, nan, nan, 0.0051330490000000006, 0.0052893050000000002, nan, nan, nan, nan, nan, nan, nan, 0.0053077380000000002, nan, nan, nan, nan, 0.0053766209999999998, 0.0053431900000000003, nan, nan, nan, nan, 0.0051352960000000001] 

我想选择阵列中的一个随机点,并制定出离这里最近的真正价值是高于还是低于它。非实数值是“南”,真实值是数字。然后我想计算这两点之间的差异,其中y_new[5]y_new[6]之间的差异仅为1天。

任何想法?

+0

这似乎很简单。所以要么我错过了一些关键信息,或者你还没有尝试过。我希望假设前者? – James

+0

这个“1天”来自哪里?我在这里没有看到任何日期。 – Matthias

回答

0

我不是一个python程序员,但我认为类似的东西会给你你想要的东西。

randomIndex = 5; 
sizeofArray = 200; 
lessThan = 0; 
greaterThan = 0; 

for(int i = randomIndex; i >=0; i---) 
{ 
value = y_new[i]; 
if(value != nan) 
{ 
lessThan = i; 
return; 
} 

} 

for(int i = randomIndex; i <sizeOfArray; i++) 
{ 
value = y_new[i]; 
if(value != nan) 
{ 
greaterThan = i; 
return; 
} 

} 

less = randomIndex - lessThan; 
great = greaterThan - randomIndex; 

if(less < great) return less; 
else return great 
+0

用于初始生成'randomIndex'和'sizeofArray'使用'randomIndex = Random()。nextInt(sizeofArray)'和'sizeofArray = len(y_new)' – James

+0

谢谢你,请放心! 我完全不熟悉编码,所以试图学习。 @james –

+0

@CharlesHolroyd如果你是这个新人,仍然在使用这个级别的算法,我会推荐学习实现排序算法。插入排序作为一个很好的入门者,但是然后尝试实现合并和选择排序,而不是看它的伪代码,只是算法的基本描述。此外,由于您正在使用python进行学习,因此可以使用turtle模块进行学习,因为它可以让您直观地查看代码正在使用的路径。用它学习如何利用递归和迭代来创建复杂的模式。 – James

0

这是我觉得最Python的方式去...

假设指数作为随机指标, y_new阵列简化, 的伎俩会被分割你的列表(片) 并找到正常和反转列表中的下一个实数。 然后以天为单位求出找到三角洲的指数。 希望它有帮助。

这里有一个简单的代码:

index=4 
y_new = [0.1, 'nan', 'nan', 0.2, 'nan','nan', 0.3,'nan'] 

nextList=y_new[index:] 
beforeList=y_new[:index] 

before_idx=(i for i,v in enumerate(list(reversed(beforeList))) if v!='nan').next()  
next_idx=(i for i,v in enumerate(nextList) if v!='nan').next()  

print y_new 
print before_idx 
print next_idx 

print "interval between 2 real number near index %d is: %d days" %(index,(next_idx+before_idx+1))