Как сгенерировать список или массив в Python
Имею исходный рандомный массив:
np.array([0, 1, 2]).
Нужно получить два ряда чисел (списков или одномерных массивов), в которых повторяются элементы исходного массива следующим образом:
np.array([0, 1, 2, 0, 1, 2, 0, 1, 2])
np.array([0, 0, 0, 1, 1, 1, 2, 2, 2]).
Чтобы проще было представить, это плоские транспонированные массивы:
np.array([[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]).ravel()
np.array([[0, 0, 0],
[1, 1, 1],
[2, 2, 2]].ravel()
Для формирования таких рядов чисел использую индексирование, но это медленно:
import numpy as np
# Задание индексов
ind_1 = np.array([0, 0, 0, 1, 1, 1, 2, 2, 2])
ind_2 = np.array([0, 1, 2, 0, 1, 2, 0, 1, 2])
# Далее должен идти бесконечный цикл 'while True':
for i in range(1):
a = np.random.sample(3)
# Длительный процесс формирования массивов m_1 и m_2:
m_1 = a[ind_1]
m_2 = a[ind_2]
Имеется ли более быстрый способ сгенерировать такие ряды чисел m_1 и m_2 другим способом, например, с использованием генерации списков?
Ответы (1 шт):
Автор решения: Кирилл Малышев
→ Ссылка
import numpy as np
a = np.array([0, 1, 2])
print(np.tile(a, 3))
print(np.repeat(a, 3))
Вывод:
[0 1 2 0 1 2 0 1 2]
[0 0 0 1 1 1 2 2 2]