应用范围同时计算多个范围

时间:2013-12-21 05:14:17

标签: python numpy range

我在列表列表中计算多个范围时遇到一些困难。 以下是我的尝试:

import numpy as np
k=[[0.0234,0.131,0.475,0.393,0.620],[0.0234,0.131,0.475,0.393,0.620]]
tak=[]
def thresh(a,b):
    for x in k:
        m=[val for val in x if a<=val<=b]
        tak.append(m)
    return tak


t1=np.arange(0.1,0.4,0.1)
for x in t1:
    t2=thresh(x,0.5)
print t2

Output obtained:[[0.131, 0.475, 0.393], [0.131, 0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475], [0.475]]

Desired Output:[[[0.131, 0.475, 0.393],[0.475, 0.393],[0.475, 0.393],[0.475]],[[0.131, 0.475, 0.393],[0.475, 0.393],[0.475, 0.393],[0.475]]]

代码中的问题是,它同时计算两个列表的范围,而不是一次处理一个列表。

有关如何解决此问题的任何建议?谢谢。

3 个答案:

答案 0 :(得分:2)

您的循环评估顺序不正确。您需要确保迭代的内容和顺序,因为它最终会影响您的输出结构。

以下是订单修正后的可能实施方法

k=[[0.0234,0.131,0.475,0.393,0.620],[0.0234,0.131,0.475,0.393,0.620]]
t1=np.arange(0.1,0.4,0.1)
def thresh(k, start, end):
    for x in k:
        yield [[val for val in x if s<=val<=end] for s in start]


list(thresh(k, t1,0.5))
[[[0.131, 0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475]], [[0.131, 0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475]]]

答案 1 :(得分:1)

你按错误的顺序循环,得到了你想要的结果,你必须按子列表应用阈值:

def thresh(lst, a,b):
    return [val for val in lst if a<=val<=b]

def apply_tresh(lst, starts, stop):
    rv = []
    for sublst in lst:
        sublv = []
        for start in starts:
            sublv.append(thresh(sublst, start, stop))
        rv.append(sublv)
    return rv

演示:

>>> apply_tresh(k, np.arange(0.1,0.4,0.1), 0.5)
[[[0.131, 0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475]], [[0.131, 0.475, 0.393], [0.475, 0.393], [0.475, 0.393], [0.475]]]

答案 2 :(得分:0)

好吧,它看起来像它按预期工作。 thresh函数将k列表的成员过滤为[a,b]中的成员。所以

x = 0.1;仅包括0.1到0.5之间的数字

[[0.131,0.475,0.393], [0.131,0.475,0.393]]

x=0.2:[[ 0.475, 0.393], [0.475,0.393]]

等等。

我无法告诉你如何得到你想要的输出。