Множество способов сделать это. Для учащегося все они поучительны.
Предложенный в другом ответе broadcasating
должен быть быстрым, но может быть немного сложным для понимания.
после вашего составного запроса:
In [301]: a = np.array([3, 2, 3, 9])
In [302]: np.concatenate([a,a,a])
Out[302]: array([3, 2, 3, 9, 3, 2, 3, 9, 3, 2, 3, 9])
In [303]: np.concatenate([a,a,a]).reshape(3,4)
Out[303]:
array([[3, 2, 3, 9],
[3, 2, 3, 9],
[3, 2, 3, 9]])
In [304]: np.concatenate([a,a,a]).reshape(3,4).T
Out[304]:
array([[3, 3, 3],
[2, 2, 2],
[3, 3, 3],
[9, 9, 9]])
Или, поскольку вы хотите расположить значения по вертикали:
In [306]: a[:,None]
Out[306]:
array([[3],
[2],
[3],
[9]])
In [307]: a[:,None].repeat(3,1)
Out[307]:
array([[3, 3, 3],
[2, 2, 2],
[3, 3, 3],
[9, 9, 9]])
другим способом:
In [308]: np.outer(a,np.ones(3,int))
Out[308]:
array([[3, 3, 3],
[2, 2, 2],
[3, 3, 3],
[9, 9, 9]])
или выполните внешнее преобразование с помощью широковещания:
In [309]: a[:,None]*np.ones(3,int)
Out[309]:
array([[3, 3, 3],
[2, 2, 2],
[3, 3, 3],
[9, 9, 9]])
С повторением списка:
In [311]: np.concatenate([a[:,None]]*3, axis=1)
Out[311]:
array([[3, 3, 3],
[2, 2, 2],
[3, 3, 3],
[9, 9, 9]])