我有一个表示间隔的数组
a=[1,3,5,7,9]
我有另一个数组
p=[2.5,7.9,6,5.7]
我想将p
的元素分发到区间中。结果数组将是间隔的下限。
例如,取第一个元素,它位于第一个区间1<2.5<3
,所以我想构造一个新的数组,其长度与p
的第一个元素相同间隔的界限,1
,同样适用于所有其他元素。结果应为[1,7,5,5]
这是我到目前为止对数组的第一个元素,但它没有返回任何东西,代码似乎永远运行
pl= p[:,0]
al=np.zeros(len(pl))
i=0
j=0
while i<len(a):
while j<len(pl):
if pl[i][np.logical_and(a[j],a[j+1])]:
al[i]=a[i]
j+=1
i+=1
print al
编辑1:根据回复,我对代码进行了以下更改
al=np.zeros(len(pl))
for i in range(len(pl)):
for j in range(len(a)-1):
**if pl[i][np.logical_and(a[j],a[j+1])]:**
al[i]=a[j]
编辑(回答):我对np.logical
运算符有一个非常误导性的理解,我想做的就是有一个复合条件语句a[j]<= pl[i]<a[j+1]
,这是正是我的代码中应该有的东西。我已将此添加到下面的答案中。对困惑感到抱歉!
答案 0 :(得分:1)
while j<len(pl):
if pl[i][np.logical_and(a[j],a[j+1])]:
p_new[i]=a[i]
j+=1 <-------##Problem lies here
所以,我认为正在发生的事情是你陷入了你的while循环。 如果你的条件不正确,J不会增加,它只是无限地重新运行(你的i也会向无穷大增加)。
看起来你想知道循环迭代的次数(len(pl)),所以for循环可能是一个更好的工具:
for i in range(len(a))
for j in range(len(pl)):
if pl[i][np.logical_and(a[j],a[j+1])]:
p_new[i]=a[i]
编辑:根据编辑和回复,我相信以下是您的目标:
a = [boundaries]
p = [p]# this can be anything
for i in p:
for bound in a:
if i > bound:
pass
else:
p1.append(bound)
答案 1 :(得分:1)
使用如下代码:
a=[1,3,5,7,9]
pl=[2.5,7.9,6,5.7]
for i in range(len(pl)):
for j in range(len(a)-1):
if a[j]<= pl[i]<a[j+1]:
pl[i]=a[j]
print pl