Подтвердить что ты не робот

Как добавить столбец к матрице?

Хорошо, представьте, что у меня есть эта Матрица: {{1,2}, {2,3}}, и я предпочел бы {{4,1,2}, {5,2,3}}. То есть, я добавил столбец в матрицу. Есть ли простой способ сделать это?

Мое лучшее предложение:

PrependColumn[vector_List, matrix_List] := 
 Outer[Prepend[#1, #2] &, matrix, vector, 1]

Но он запутывает код и постоянно требует загрузки большего количества кода. Разве это не так построено?

4b9b3361

Ответ 1

Поскольку ArrayFlatten был введен в Mathematica 6, наименее запутанное решение должно быть

matrix = {{1, 2}, {2, 3}}
vector = {{4}, {5}}

[email protected]{{vector, matrix}}

Хороший трюк заключается в том, что замена любого блока матрицы на 0 дает нулевой блок нужного размера.

Ответ 2

Я думаю, что наименее неясным является следующий способ сделать это:

PrependColumn[vector_List, matrix_List] := MapThread[Prepend, {matrix, vector}];

В общем, MapThread - это функция, которую вы чаще всего будете использовать для таких задач, как эта (я все время использую ее при добавлении меток в массивы, прежде чем создавать их с помощью Grid), и это может сделать вещи намного понятнее и проще использовать Prepend вместо эквивалентного Prepend[#1, #2]&.

Ответ 3

Я считаю, что наиболее распространенным способом является транспонирование, добавление и перенос:

PrependColumn[vector_List, matrix_List] := 
  Transpose[Prepend[Transpose[matrix], vector]]

Ответ 4

АБСОЛЮТНО.. ПО FAR... FASTEST метод добавить или добавить столбец из моих тестов различных методов в массиве RandomReal[100,{10^8,5}] (дети, не пробуйте это дома... если ваша машина не построен для скорости и памяти, операции на массиве такого размера гарантированно повесить ваш компьютер) ... это: Append[tmp\[Transpose], [email protected]@tmp]\[Transpose]. Замените Append на Prepend по желанию.

Следующее самое быстрое: Table[tmp[[n]]~Join~{n}, {n, [email protected]}] - почти в два раза медленнее.