У меня есть следующие начальные и конечные значения:
start = 0
end = 54
Мне нужно сгенерировать подмножества из 4 последовательных целых чисел, начиная с start
до end
с пробелом 20 между каждым подмножеством. Результат должен быть таким:
0, 1, 2, 3, 24, 25, 26, 27, 48, 49, 50, 51
В этом примере мы получили 3 подмножества:
0, 1, 2, 3
24, 25, 26, 27
48, 49, 50, 51
Как я могу сделать это, используя numpy
или pandas
?
Если я сделаю r = [i for i in range(0,54,4)]
, я получу [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52]
.
6 ответов
Может быть, примерно так:
r = [j for i in range(0, 54, 24) for j in range(i, i + 4)]
print(r)
[0, 1, 2, 3, 24, 25, 26, 27, 48, 49, 50, 51]
Это должно получить вам то, что вы хотите:
j = 20
k = 4
result = [split for i in range(0,55, j+k) for split in range(i, k+i)]
print (result)
Выход:
[0, 1, 2, 3, 24, 25, 26, 27, 48, 49, 50, 51]
Вы можете использовать numpy.arange, который возвращает ndarray
объект, содержащий равномерно распределенные значения в заданном диапазоне
import numpy as np
r = np.arange(0, 54, 4)
print(r)
Результат
[0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52]
Numpy подход
Вы можете использовать np.arange
для генерации числа со значением шага 20 + 4
, где 20 — это пространство между каждым интервалом и 4 — для каждого последовательного подмассива.
start = 0
end = 54
out = np.arange(0, 54, 24) # array([ 0, 24, 48]) These are the starting points
# for each subarray
step = np.tile(np.arange(4), (len(out), 1))
# [[0 1 2 3]
# [0 1 2 3]
# [0 1 2 3]]
res = out[:, None] + step
# array([[ 0, 1, 2, 3],
# [24, 25, 26, 27],
# [48, 49, 50, 51]])
Это можно сделать с помощью плоского питона:
rangeStart = 0
rangeStop = 54
setLen = 4
step = 20
stepTot = step + setLen
a = list( list(i+s for s in range(setLen)) for i in range(rangeStart,rangeStop,stepTot))
В этом случае вы получите подмножества в виде подсписков в массиве.
Я не думаю, что вам нужно использовать numpy или pandas, чтобы делать то, что вы хотите. Я достиг этого с помощью простого цикла while
num = 0
end = 54
sequence = []
while num <= end:
sequence.append(num)
num += 1
if num%4 == 0: //If four numbers have been added
num += 20
//output: [0, 1, 2, 3, 24, 25, 26, 27, 48, 49, 50, 51]
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.