Python列表值交集

时间:2011-11-21 11:37:45

标签: python list graph

我有一个不均匀的值长度列表,现在我想将它们转换为1到100的列表。 因此,如果列表具有100个值,那么在位置10将是列表[10]

现在当我有一个248个值的列表时,我想制作一个这样的折线图,并且x轴的范围是1-100%,所以我可以询问/交叉10号位的值。

或者另一种选择可能是它长248个值(折线图)并且你在x轴上询问2.48的值,它返回一个特定的y值。然后通过每次为xaxis值添加2.48重复100次。

numpy或matplotlib能够做到这一点吗?我不需要整个解释c.q.码。但是好的方向上的一个例子或一个例子会很好。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.interp.html是我需要的

xp = [1,2,3]

fp = [3,2,0]

np.interp(2.5,xp,fp)

1.0

2 个答案:

答案 0 :(得分:2)

轻松!只需使用numpy.linspace生成用于绘制值的x位置:

import numpy as np
import matplotlib.pyplot as plt

vals=np.random.random(248)
x=np.linspace(1,100,len(vals))

plt.plot(x,vals)
plt.show()

要对您的值列表进行二次采样,您可以使用numpy“高级”索引:

vals=np.array(vals)
sample=vals[np.round(np.linspace(0,len(vals)-1,100)).astype(int)]

现在要找到“位置10”的值,您只需获取sample[10]


请注意,numpy数组(如Python列表)是0索引的。我知道你要求索引从1到100(并且可以完成 1 ),但如果你同意0索引约定并允许使用Python和numpy的其余部分会更容易sample要从0到99建立索引。

1 sample=np.r_[0,vals[np.round(np.linspace(0,len(vals)-1,100)).astype(int)]]

答案 1 :(得分:0)

不是你真正打算做什么,但Python通常不需要外部模块:

class NormalizedList(list):
    def __getitem__(self, index):
        length = len(self)
        denorm_index = int ((index * length) / 100.0 + 0.5)
        return list.__getitem__(self, denorm_index)


mylist = NormalizedList(range(248))

print mylist[50]