Как сгенерировать список или массив в 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]
→ Ссылка