У меня есть следующие начальные и конечные значения:

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].

0
Fluxy 26 Янв 2022 в 17:11

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]
2
AloneTogether 26 Янв 2022 в 17:34

Это должно получить вам то, что вы хотите:

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]
3
peru_45 26 Янв 2022 в 17:33

Вы можете использовать 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]
0
Kally 26 Янв 2022 в 17:26

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]])
0
Ch3steR 26 Янв 2022 в 17:36

Это можно сделать с помощью плоского питона:

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))

В этом случае вы получите подмножества в виде подсписков в массиве.

0
Hezi Shahmoon 26 Янв 2022 в 17:38

Я не думаю, что вам нужно использовать 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]
0
Henry 26 Янв 2022 в 17:39