Улучшение цикла «пока» с Numpy - PullRequest
0 голосов
/ 05 июня 2019

Я дал следующие три переменные:

start      = 30    #starting value
end        = 60    #ending value
slice_size = 6     #value difference per tuble

start и end - номера строк массива.Моя цель - создать массив / список кортежей, в котором каждый кортеж включает столько элементов, сколько определяет slice_size.Небольшой пример: если start и end имеют вышеуказанные значения, первые четыре кортежа будут:

[[30,35], [36,41], [42,47], [48, 53], ...].

Но теперь приходит ключ: первое значение следующего кортежа начинается не с первого значения до + slice_size, а с первого значения + slice_size/2,Поэтому я хочу что-то вроде этого:

[[30,35], [33,38], [36,41], [39,44], ...].

Этосписок кортежей продолжается до тех пор, пока не будет достигнуто end или до того, как оно будет достигнуто - до <=end.Последнее значение в списке не может передавать значение end.Значение slice_size должно, конечно, всегда быть четным числом для правильной работы.

Моя попытка nooby выполняется циклом while:

condition = 0
i = 0
list = []
half_slice = int(slice_size /2)
while condition <= end:
    list.append([start+int(slice_size/2)*i,start+((slice_size-1)+i*half_slice)])
    condition = start+((slice_size-1)+i*int(slice_size/2))
    i += 1

Дело в том, что это работает.Однако я знаю, что это полная чушь, и я хочу улучшить свои навыки.У вас есть предложение, как это сделать в несколько строк кода?

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Вы не должны использовать list, поскольку это зарезервированное слово

import numpy as np

start      = 30    #starting value
end        = 60    #ending value
slice_size = 6     #value difference per tuble

l = [[i,j] for i,j in zip(np.arange(start, end, slice_size/2),
                          np.arange(start + slice_size - 1,
                                    end + slice_size - 1,
                                    slice_size/2)
                          )
     ]
print(l)

Вывод:

[[30.0, 35.0],
 [33.0, 38.0],
 [36.0, 41.0],
 [39.0, 44.0],
 [42.0, 47.0],
 [45.0, 50.0],
 [48.0, 53.0],
 [51.0, 56.0],
 [54.0, 59.0],
 [57.0, 62.0]]
1 голос
/ 05 июня 2019

1) НЕ используйте list в качестве имени переменной.Это зарезервированное ключевое слово.
2) Не решение NumPy, но вы можете использовать понимание списка:

start      = 30    #starting value
end        = 60    #ending value
slice_size = 6     #value difference per tuble

result = [[current, current + slice_size - 1] for current in range(start, end - slice_size + 2, slice_size // 2)]
print(result)

Вывод:

[[30, 35], [33, 38], [36, 41], [39, 44], [42, 47], [45, 50], [48, 53], [51, 56], [54, 59]]

Это будет работать и для нечетного числа slice_size.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...