按另一个整数列表

时间:2018-06-07 02:21:59

标签: python python-3.x discretization

我有一个在python中离散化的问题。

我有一个列表st

st=[(-0.8,0.8),(-0.5,0.5),(-0.104,0.104),(-0.872,0.872)]

我想将'st'离散化为由不同列表确定的许多部分。换句话说,我想将列表中的每个元素划分为n部分。

例如,我想除以列表中的元素b = (3,3,6,2)。因此(-0.8,0.8)将分为3部分。 (-0.5,0.5)将分为3个部分,依此类推。

输出应该看起来像st = [[( - 0.8,-0.2),( - 0.2,0.2),(0.2,0.8)),....]] 谢谢。

1 个答案:

答案 0 :(得分:0)

我认为有两个问题可以单独处理:

如何从Python

获得均匀间隔的间隔

为此,让我们看一个更简单的例子:

import numpy as np
a = (-0.8,0.8)

b = 3
c = np.linspace(a[0], a[1], b + 1)
d = list(zip(c, c[1:]))
print(d)

哪个输出:

[
    (-0.80000000000000004, -0.26666666666666672),
    (-0.26666666666666672, 0.26666666666666661),
    (0.26666666666666661, 0.80000000000000004)
]

如何使用给定的数据结构重复上述过程

st=[(-0.8,0.8),(-0.5,0.5),(-0.104,0.104),(-0.872,0.872)]

b=(3,3,6,2)

result = []
for start_stop, parts in  zip(st, b):
    start, stop = start_stop
    c = np.linspace(start, stop, parts + 1)
    d = list(zip(c, c[1:]))
    result.append(d)

print(result)

结果是:

[
    [
        (-0.80000000000000004, -0.26666666666666672), 
        (-0.26666666666666672, 0.26666666666666661), 
        (0.26666666666666661, 0.80000000000000004)
    ], 
    [
        (-0.5, -0.16666666666666669), 
        (-0.16666666666666669, 0.16666666666666663),
        (0.16666666666666663, 0.5)
    ], 

依旧......

Zip匹配从一个列表到另一个列表的元素,并允许您将它们循环在一起,这在这里非常有用。

NumPy的线性间距功能(np.linspace)是您要执行的操作。详情请见here