Python 将数字数组从旧范围转换为新范围,其中最小值为100,最大值为0?

Python 将数字数组从旧范围转换为新范围,其中最小值为100,最大值为0?,python,arrays,math,Python,Arrays,Math,假设我们有一个[2,5,7,9,3]的值数组,我希望2是100,因为它是最低的值,9是0,因为它是最高的,中间的一切都是插值的,我如何转换这个数组?当我说interpolated时,我希望在新的比例中,数字之间的距离是相同的,因此3不会是100,但很接近,可能是95左右。只需将数组缩放到[01100],然后将所有数字减去100即可。因此,解决方案是: import numpy as np arr = [2, 5, 7, 9, 3] min_val = np.min(arr) max_val

假设我们有一个[2,5,7,9,3]的值数组,我希望2是100,因为它是最低的值,9是0,因为它是最高的,中间的一切都是插值的,我如何转换这个数组?当我说interpolated时,我希望在新的比例中,数字之间的距离是相同的,因此3不会是100,但很接近,可能是95左右。

只需将数组缩放到
[01100]
,然后将所有数字减去100即可。因此,解决方案是:

import numpy as np

arr = [2, 5, 7, 9, 3]

min_val = np.min(arr)
max_val = np.max(arr)
total_range = max_val - min_val

new_arr = [(100 - int(((i - min_val)/total_range) * 100.0)) for i in arr]


请注意,如果您希望指定范围内从最大值到最小值的所有值都均匀分布,则您的
3
示例将无法实现。因此,在这个解决方案中,
3
大约是84(而不是95)。

只需将数组缩放到
[01100]
,然后将它们减去100即可。因此,解决方案是:

import numpy as np

arr = [2, 5, 7, 9, 3]

min_val = np.min(arr)
max_val = np.max(arr)
total_range = max_val - min_val

new_arr = [(100 - int(((i - min_val)/total_range) * 100.0)) for i in arr]


请注意,如果您希望指定范围内从最大值到最小值的所有值都均匀分布,则您的
3
示例将无法实现。因此,在这个解决方案中,
3
大约是84(而不是95)。

我希望我正确理解了这个问题。如果是这样,我的解决方案是对列表进行排序,然后按列表的最高值和最低值之差除以100的比例进行缩放。下面是一个运行良好的快速代码示例:

a = [2, 5, 7, 9, 3]
a.sort()
b = []
for element in a:
    b.append(int(100 - (element - a[0]) * (100 / (a[-1]-a[0]))))
print(a)
print(b)

我希望我正确地理解了这个问题。如果是这样,我的解决方案是对列表进行排序,然后按列表的最高值和最低值之差除以100的比例进行缩放。下面是一个运行良好的快速代码示例:

a = [2, 5, 7, 9, 3]
a.sort()
b = []
for element in a:
    b.append(int(100 - (element - a[0]) * (100 / (a[-1]-a[0]))))
print(a)
print(b)

沿着相同的路线但分成更小的步骤 加上命名变量的实践

a = [2,5,7,9,3]

a_min = min(a)
a_max = max(a)
a_diff = a_max - a_min

b=[]
for x in a:
    b += [(x- a_min)]
b_max = max(b)

c=[]
for x in b:
    c += [(1-(x/b_max))*100]
print('c: ',c)   

//c:  [100.0, 57.14285714285714, 28.57142857142857, 0.0, 85.71428571428572]

沿着相同的路线但分成更小的步骤 加上命名变量的实践

a = [2,5,7,9,3]

a_min = min(a)
a_max = max(a)
a_diff = a_max - a_min

b=[]
for x in a:
    b += [(x- a_min)]
b_max = max(b)

c=[]
for x in b:
    c += [(1-(x/b_max))*100]
print('c: ',c)   

//c:  [100.0, 57.14285714285714, 28.57142857142857, 0.0, 85.71428571428572]

你的标题和文章内容有点冲突。你希望最高值的数字是100(标题),但在你的帖子中,你的
2
是100..哇,你说得对,我重新编写了问题谢谢。我确实希望2是100,9是0。你的标题和文章的内容有点冲突。你希望最高值的数字是100(标题),但在你的帖子中,你的
2
是100..哇,你说得对,我重新编写了问题谢谢。我确实希望2是100,9是0。以及中间插入的所有内容。您认为您可以添加一点吗?@Alex请查看更新。最后一行中缺少的paren“0)for”应该是“0”)for“非常有效,谢谢@我感谢你。已更新。您认为您可以添加一点吗?@Alex请查看更新。最后一行“0)for”中缺少paren应为“0”)for“非常有效,谢谢@我感谢你。更新。可以工作,但排序很昂贵。当你想要的只是最小最大值的时候,就抓住它们。虽然有效,但排序是昂贵的。当你想要的只是最小最大值时,抓住它们。