Как взять n массивов и установить их как отдельные столбцы в массиве грандеров - PullRequest
1 голос
/ 22 марта 2019

Я начинаю с n числа массивов. Я собираюсь определить несколько в качестве примера.

X = ([1,2,3,4})
Y = ([5,6,7,8])
Z = ([3,6,7,8])

Как мне создать еще один массив, в котором каждый из моих начальных массивов (X, Y и Z) будет представлен в виде столбцов? Конечный массив будет выглядеть так:

1 5 3
2 6 6
3 7 7
4 8 8

Ответы [ 3 ]

2 голосов
/ 22 марта 2019

Возможно, вы можете попробовать вот так:

import numpy as np

X = np.array([1,2,3,4])
Y = np.array([5,6,7,8])
Z = np.array([3,6,7,8])
a = np.concatenate((X[:,np.newaxis],Y[:,np.newaxis],Z[:,np.newaxis]),axis=1)
1 голос
/ 30 марта 2019

Для этой цели имеется встроенная функция column_stack.

np.column_stack((X, Y, Z))
# array([[1, 5, 3],
#        [2, 6, 6],
#        [3, 7, 7],
#        [4, 8, 8]])

В качестве альтернативы вы можете использовать vstack и затем транспонировать

arr = np.vstack((X,Y,Z)).T
1 голос
/ 22 марта 2019

Я не большой поклонник сторонних библиотек, так что это ответ, который не использует numpy:

>>> X = ([1,2,3,4])
>>> Y = ([5,6,7,8])
>>> Z = ([3,6,7,8])
# timeit.timeit 0.30220915000000004

>>> output = [[X[i], Y[i], Z[i]] for i in range(len(X))]
# timeit.timeit 1.677441058
>>> print(output)
[[1, 5, 3], [2, 6, 6], [3, 7, 7], [4, 8, 8]]

>>> columns = "\n".join([" ".join([str(n) for n in i]) for i in output])
# timeit.timeit 5.729952549999999
>>> print(columns)
1 5 3
2 6 6
3 7 7
4 8 8

>>> for i in range(len(X)):
...    print(X[i], Y[i], Z[i])
1 5 3
2 6 6
3 7 7
4 8 8
# timeit.timeit 1.2027191299999984 without print

Использование numpy:

>>> X = np.array([1,2,3,4])
>>> Y = np.array([5,6,7,8])
>>> Z = np.array([3,6,7,8])
# timeit.timeit 4.819555767999999

>>> output = np.concatenate((X[:, np.newaxis], Y[:, np.newaxis], Z[:, np.newaxis]), axis=1)
# timeit.timeit 4.175194263
>>> print(output)
[[1 5 3]
 [2 6 6]
 [3 7 7]
 [4 8 8]]

>>> columns = "\n".join([" ".join([str(n) for n in i]) for i in output])
# timeit.timeit 22.564187487
>>> print(columns)
1 5 3
2 6 6
3 7 7
4 8 8

В комментариях (#) Я написал время, необходимое для выполнения каждого раздела кода, используя timeit.timeit, чтобы вы могли сделать свои собственные выводы.

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