2013-08-06 71 views
-4

我有一個數範圍如下重縮放編號範圍,其保持原單間距

[0.31622776601683794, 0.26591479484724945, 0.24028114141347545, 0.22360679774997896, 
0.21147425268811282, 0.20205155046766235, 0.19441308418139638, 0.1880301546543197, 
0.18257418583505536, 0.17782794100389226] 

我想與所有其他項目維修器材那裏重新縮放的數目範圍,使得第一項是1,則最後一個項目0相對於原始列表的間距。

另外我需要列表中的所有值在最終列表中加1。不包括第一項。

我數學絕對的垃圾,所以如果有人知道如何做,這是蟒蛇,我將非常感激......

+0

那麼你的例子期望的輸出是什麼? – arshajii

+2

如果第一項是1並且你想要所有項目的總和爲1,那麼你需要'[1,0,0,0,...,0]'。 –

+0

@AshwiniChaudhary [1,-1,1,0 ...]呢? ;) –

回答

1

從全部減去last,然後全部除以first

emil ~ > python 
Python 2.7.1 (r271:86832, Aug 5 2011, 03:30:24) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> l = [0.31622776601683794, 0.26591479484724945, 0.24028114141347545, 0.22360679774997896, 
... 0.21147425268811282, 0.20205155046766235, 0.19441308418139638, 0.1880301546543197, 
... 0.18257418583505536, 0.17782794100389226] 
>>> l 
[0.31622776601683794, 0.26591479484724945, 0.24028114141347545, 0.22360679774997896, 0.21147425268811282, 0.20205155046766235, 0.19441308418139638, 0.1880301546543197, 0.18257418583505536, 0.17782794100389226] 
>>> len(l) 
10 
>>> l1 = [] 
>>> l1[:] = [x - l[9] for x in l] 
>>> l1 
[0.13839982501294568, 0.08808685384335718, 0.06245320040958319, 0.0457788567460867, 0.03364631168422055, 0.024223609463770085, 0.01658514317750412, 0.010202213650427422, 0.004746244831163093, 0.0] 
>>> l2 = [] 
>>> l2[:] = [x/l1[0] for x in l1] 
>>> l2 
[1.0, 0.6364665116817719, 0.4512520185899182, 0.33077250453029566, 0.2431094958470745, 0.1750263, 0.11983500106270202, 0.0737155097520761, 0.03429371988526097, 0.0] 

並以規範化(總和= 1):

>>> l3 = [] 
>>> l3[:] = [x/sum(l2) for x in l2] 
>>> l3 
[0.3263205883093977, 0.20769212653122596, 0.14725282418206537, 0.107937878274899, 0.07933163370841843, 0.05711468558905446, 0.03910462804683822, 0.024054888509824617, 0.01119074684827605, 0.0] 

但是你不能滿足你要求的,除非第一個和最後的總和的數字是0的條件,所以對於您的示例數據是不可能的。

+0

完美謝謝!!!!! – Jim

2

你問的東西,這是不可能的。

如果最小數爲0且最大數爲1,那麼總和將大於1(除非所有數字除最高外均相等)。 此外,如果你想保持數字之間的絕對距離,你可以設置最小或最大值,而不是兩者。

但是,這裏有一些代碼可能會有所幫助。如果你有一個numpy的陣列a

a-=np.min(a) 

將設置最低爲0

和:

a/=np.max(a) 

將設置最高爲1

和:

a/=np.sum(a) 

將總和設置爲1.

+0

@arshajii'a/= np.sum(a)'會給出正好1的總和。 – Bitwise

+0

@arshajii謝謝,我現在在我的回答中解釋了奇怪的情況。 – Bitwise