Как объединить много векторов в одной матрице (каждый вектор является столбцом новой матрицы) - PullRequest
3 голосов
/ 24 марта 2019

Для простоты у меня есть 4 вектора (типа numpy.ndarray) размером 256, и я хочу создать новую матрицу, где каждый столбец соответствует каждому вектору.Поэтому после объединения у меня будет матрица 256 * 4

Я пытался использовать либо hstack, либо np.concatenate, но не получил желаемый результат ..

Заранее спасибо

1 Ответ

1 голос
/ 24 марта 2019

С vstack и транспонирование T:

n = 256
a = np.arange(n) + 0
b = np.arange(n) + 1
c = np.arange(n) + 2
d = np.arange(n) + 3

x = np.vstack([a,b,c,d]).T
x

Выход:

array([[  0,   1,   2,   3],
       [  1,   2,   3,   4],
       [  2,   3,   4,   5],
       ...,
       [253, 254, 255, 256],
       [254, 255, 256, 257],
       [255, 256, 257, 258]])

Или, альтернативно, существует метод column_stack:

x = np.column_stack([a,b,c,d])

И если вы хотите получить его как фактический matrix вместо ndarray:

m = np.matrix([a,b,c,d]).T

Обновление: Чтобы сделать это с помощью цикла, вы можете собрать свои массивы в список и затем сложить их вместе:

n = 256
l = []
for i in range(4):
    l.append(np.arange(n) + i)

x = np.vstack(l).T
x

Или, альтернативно, составлять их по одному на каждом шаге цикла и транспонировать после цикла:

n = 256
x = np.arange(n)
for i in range(1,4):
    x = np.vstack([x, np.arange(n) + i])

x = x.T
x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...