2011-11-21 59 views
0

我有一個不均勻長度值的列表,現在我想將它們轉換爲從1到100的列表。 因此,如果列表有100個值,那麼在位置10將是列表[10]Python list value intersection

現在,當我有一個248值的列表,我想要做一個這樣的線圖和X軸範圍從1-100%,所以我可以問/相交什麼值在位置10.

或者另一種選擇可能是它的值爲248(線圖),你在x軸上詢問2.48的值,它返回某個y值。然後重複100次,每次爲x軸值加2.48。

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

簡單!只需使用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]


請注意,像Python列表這樣的numpy數組是0索引的。我知道你問索引從1到100(這可以做),但如果你遵循0索引約定並且允許sample從Python索引和索引,那麼使用Python和numpy的其餘部分將更容易0〜99

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

+0

這確實是幾乎做的。現在我想知道1,2,3,4,5,6,7,8,9 ....等等的價值 – Jasper

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]