В Python numpy при объявлении матриц я использую форму np.array ([[row 1], [row 2],... [Row n]]). Это объявление матрицы построчно. Есть ли у них возможность в Python объявлять матрицу по столбцам? Я ...

1
Anirban Chakraborty 15 Янв 2021 в 09:50

2 ответа

Лучший ответ
In [65]: np.array([[1,2,3],[4,5,6]])
Out[65]: 
array([[1, 2, 3],
       [4, 5, 6]])

Существует целое семейство функций concatenate, которые помогают объединять массивы различными способами.

stack с осью по умолчанию ведет себя так же, как np.array:

In [66]: np.stack([[1,2,3],[4,5,6]], axis=0)
Out[66]: 
array([[1, 2, 3],
       [4, 5, 6]])

np.vstack тоже делает то же самое.

Но чтобы сделать столбики:

In [67]: np.stack([[1,2,3],[4,5,6]], axis=1)
Out[67]: 
array([[1, 4],
       [2, 5],
       [3, 6]])

np.column_stack([[1,2,3],[4,5,6]]) делает то же самое.

Транспонирование также возможно: np.array([[1,2,3],[4,5,6]]).T.

Все эти функции '* stack' в конечном итоге используют np.concatenate, поэтому стоит потратить время на то, чтобы научиться использовать его напрямую. Возможно, вам потребуется добавить размеры к входным данным.

[66] делает (под одеялом):

In [72]: np.concatenate((np.array([1,2,3])[:,None], np.array([4,5,6])[:,None]),axis=1)
Out[72]: 
array([[1, 4],
       [2, 5],
       [3, 6]])
2
hpaulj 15 Янв 2021 в 07:19

Во время самого создания массива вы можете использовать numpy.transpose() вместо numpy.array(), потому что numpy.tranpose() принимает любой объект, подобный массиву, в качестве входных данных:

my_array = np.transpose ([[1,2,3],[4,5,6]])
print (my_array)

Вывод:

[[1 4]
 [2 5]
 [3 6]]
2
fountainhead 15 Янв 2021 в 07:02
65731662