Как добавить столбец в матрицу? - PullRequest
11 голосов
/ 07 августа 2009

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

Мое лучшее предложение таково:

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

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

Ответы [ 4 ]

11 голосов
/ 16 февраля 2010

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

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

ArrayFlatten@{{vector, matrix}}

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

7 голосов
/ 08 августа 2009

Я считаю, что наиболее распространенный способ - это транспонировать, готовить и снова транспонировать:

PrependColumn[vector_List, matrix_List] := 
  Transpose[Prepend[Transpose[matrix], vector]]
7 голосов
/ 07 августа 2009

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

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

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

0 голосов
/ 25 сентября 2011

Метод ... АБСОЛЮТНО .. ПО ДАЛЬНЕЙШЕМУ ... БЫСТРОМУ способ добавить или добавить столбец из моих тестов различных методов в массиве RandomReal[100,{10^8,5}] (дети, не пытайтесь сделать это дома ... если ваша машина не построен для скорости и памяти, операции с массивом такого размера гарантированно повесят ваш компьютер) ... это: Append[tmp\[Transpose], Range@Length@tmp]\[Transpose]. Замените Append на Prepend по желанию.

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

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