Как вставить столбец в матрицу, правильный способ Mathematica

Я думаю, что в системе Mathematica предпочтение отдается строкам, а не столбцам.

Учитывая матрицу, вставить строку кажется легко, просто используйте Insert []

(a = {{1, 2, 3}, {4, 0, 8}, {7 , 8, 0}}) // MatrixForm

1   2    3
4   0    8
7   8    0

 row = {97, 98, 99};
(newa = Insert[a, row, 2]) // MatrixForm

1   2   3
97  98  99
4   0   8
7   8   0

Но для вставки столбца после некоторой борьбы я нашел два способа, которые я показываю ниже, и хотел бы спросите здесь экспертов, видят ли они более короткий и прямой путь (у Mathematica так много команд, и я мог бы пропустить одну, которая делает такие вещи более прямым образом), поскольку я думаю, что методы, которые у меня есть сейчас, все еще слишком сложны для такой базовой операции.

Первый метод

Требуется двойное транспонирование:

a = {{1, 2, 3}, {4, 0, 8}, {7 , 8, 0}}
column = {97, 98, 99}
newa = Transpose[Insert[Transpose[a], column, 2]]

1   97  2   3
4   98  0   8
7   99  8   0

Второй метод

Используйте SparseArray, но нужно следить за местоположениями индексов. Довольно неудобно делать это:

(SparseArray[{{i_, j_} :> column[[i]] /; j == 2, {i_, j_} :> a[[i, j]] /; j == 1, 
              {i_, j_} :> a[[i, j - 1]] /; j > 1}, {3, 4}]) // Normal

1   97  2   3
4   98  0   8
7   99  8   0

Вопрос в том, есть ли более функциональный способ, который немного короче, чем описанный выше? Я мог бы, конечно, использовать одно из вышеперечисленных и обернуть все это функцией, скажем insertColumn [...] , чтобы упростить использование. Но хотел посмотреть, есть ли более простой способ сделать это, чем то, что есть у меня.

Для справки, вот как я делаю это в Matlab:

EDU>> A=[1 2 3;4 0 8;7 8 0]
A =
     1     2     3
     4     0     8
     7     8     0

EDU>> column=[97 98 99]';

EDU>> B=[A(:,1) column A(:,2:end)]

B =
     1    97     2     3
     4    98     0     8
     7    99     8     0
22
задан Matt 17 July 2015 в 13:58
поделиться