Python 将数字数组从旧范围转换为新范围,其中最小值为100,最大值为0?
假设我们有一个[2,5,7,9,3]的值数组,我希望2是100,因为它是最低的值,9是0,因为它是最高的,中间的一切都是插值的,我如何转换这个数组?当我说interpolated时,我希望在新的比例中,数字之间的距离是相同的,因此3不会是100,但很接近,可能是95左右。只需将数组缩放到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
[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“非常有效,谢谢@我感谢你。更新。可以工作,但排序很昂贵。当你想要的只是最小最大值的时候,就抓住它们。虽然有效,但排序是昂贵的。当你想要的只是最小最大值时,抓住它们。