我的数字范围如下,
[0.31622776601683794, 0.26591479484724945, 0.24028114141347545, 0.22360679774997896,
0.21147425268811282, 0.20205155046766235, 0.19441308418139638, 0.1880301546543197,
0.18257418583505536, 0.17782794100389226]
我想重新调整数字范围,因此第一项为1,最后一项为0,所有其他项目相对于原始列表保持间距。
此外,我需要列表中的所有值在最终列表中加起来为1。排除第一项。
我绝对是数学上的垃圾,所以如果有人知道如何做到这一点就是python我会非常感激......
答案 0 :(得分:2)
你要求的东西是不可能的。
如果最小数字为0且最大值为1,则总和将大于1(除非所有数字相等,除了最高值)。 此外,如果您想要保持数字之间的绝对距离,您可以设置最小值或最大值,而不是两者。
但是,这里有一些可能有用的代码。如果你有一个numpy数组a
:
a-=np.min(a)
将最小值设置为0.
和
a/=np.max(a)
将最大值设置为1。
和
a/=np.sum(a)
将总和设置为1。
答案 1 :(得分: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.175026301236322, 0.11983500106270202, 0.0737155097520761, 0.03429371988526097, 0.0]
规范化(sum = 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 ,否则无法满足您要求的条件,因此对于您的样本数据,这是不可能的。