Как создать диапазон между двумя списками с плавающей запятой в python?

#python #arrays #list #ran&e #increment

#python #массивы #Список #диапазон #увеличить

Вопрос:

Существует два списка.

Одинаковое количество элементов (с плавающей запятой).

Переменная int, указывающая количество шагов.

Существует ли команда или порядок, способный создать диапазон от первых значений до вторых?

 divider = 12
startValues= [0.9,     0.3,     0.8,     0.9]
endValues  = [0.6,     1.0,     1.0,     0.4]

#the result should look like this:
#incrementalValues = [0.025, 0.05833, 0.0166, 0.04166]

#startValues =     [0.9,   0.3,     0.8,    0.9     ]
#intermediaryVal = [0.875, 0.35833, 0.8166, 0.85834 ]
#intermediaryVal = [0.85,  0.4166,  0.8333, 0.81668 ]
#intermediaryVal = [0.825, 0.4749,  0.8500, 0.77502 ]
#intermediaryVal = [0.8,   0.5333,  0.8666, 0.73336 ]
#intermediaryVal = [0.775, 0.5916,  0.8833, 0.6917  ]
#intermediaryVal = [0.75,  0.6499,  0.9000, 0.65004 ]
#intermediaryVal = [0.725, 0.7083,  0.9166, 0.60838 ]
#intermediaryVal = [0.7,   0.7666,  0.9333, 0.56672 ]
#intermediaryVal = [0.675, 0.8249,  0.9500, 0.52506 ]
#intermediaryVal = [0.65,  0.8833,  0.9666, 0.4834  ]
#intermediaryVal = [0.625, 0.9416,  0.9833, 0.44174 ]
#endValues =       [0.6,   1.0,     1.0,    0.4     ]
  

Комментарии:

1. Итак, ваш вопрос заключается в том, как создать диапазон, который варьируется, например, от 0,9 до 0,6, выполнив 12 шагов, определенных целым числом?

2. да. это именно так.

3. Я не вижу много задействованных идиоматик Python. Это скучный низкоуровневый материал с обычным округлением из-за проблем с плавающей запятой.

4. Например, просто используйте numpy.linspace(0.9,0.6, 13)

5. Не-numpy: incrementalValues = [(x[0]-x[1])/divider for x in zip(startValues,endValues)]

Ответ №1:

Да, вы можете использовать numpy

 import numpy as np 
  
spaces = list(np.linspace(0.5, 1.5, 8))
print(spaces)

# output :
# [0.5, 0.64285714285714279, 0.7857142857142857, 0.9285714285714286, 1.0714285714285714, 1.2142857142857142, 1.3571428571428572, 1.5]
  

Ответ №2:

Простой функцией могла бы быть эта (возможно, название немного неудачное):

 def listRan&e(startValues, endValues, divider):
    steps = [(e-s)/divider for s,e in zip(startValues, endValues)]
    for t in ran&e(1,divider 1):
        yield [v s*t for v,s in zip(startValues,steps)]
  

использование аналогично ran&e функции:

 divider = 12
startValues= [0.9,     0.3,     0.8,     0.9]
endValues  = [0.6,     1.0,     1.0,     0.4]

for v in listRan&e(startValues, endValues, divider):
    print(v)
  

Комментарии:

1. Думаю, я объясню вам эту функцию. это может работать на любой машине.

Ответ №3:

я использую np.aran&e

 divider = 12
startValues= [0.9,     0.3,     0.8,     0.9]
endValues  = [0.6,     1.0,     1.0,     0.4]

lst = []
for start , stop in zip(startValues , endValues):
    if start<stop:
        step =(stop-start) / divider
    else:
        step = -(start - stop) / divider
    lst.append(np.aran&e(start , stop ,step))

pd.DataFrame(lst).T
pd.concat([pd.DataFrame(lst).T , pd.DataFrame([endValues])])