如何将一列/一行插入矩阵?

时间:2013-12-02 19:44:44

标签: octave

假设我们有一个像

这样的3x3矩阵
b = 2 * eye(3);
ans =

2   0   0
0   2   0
0   0   2

我想要一个像

这样的3x4矩阵
1   2   0   0
1   0   2   0
1   0   0   2

获得它的最佳方法是什么?

7 个答案:

答案 0 :(得分:89)

一种简单的内联方式是:

b = [ones(size(b, 1), 1) b];

答案 1 :(得分:16)

在GNU Octave中:

将两个矩阵水平连接在一起:用矩阵分隔矩阵,
并将结果括在方括号中:

X = [ones(rows(X), 1) X];

更简单的例子:
在一个数字上粘贴(添加水平"列"带逗号的元素):

octave:1> [[3,4,5],8]
ans =
   3   4   5   8

使用逗号:

水平粘贴另一个矩阵(作为附加列)
octave:2> [[3,4,5],[7,8,9]]
ans = 
   3   4   5   7   8   9

使用分号垂直粘贴另一个矩阵(作为附加行):

octave:3> [[3,4,5];[7,8,9]]
ans =
   3   4   5
   7   8   9

答案 2 :(得分:7)

一种方法是:

function [result] = prependOnes(matrix)
  result = [ones(rows(matrix),1) matrix];
end

prependOnes(b)

答案 3 :(得分:3)

我想指出[A B]实际上创建了新矩阵,与插入相反,这应该从其句法结构中显而易见。但是我看到很多地方使用追加插入这个词,我想知道八度音是否做了任何聪明的事情,所以我进行了测试

function testAppend(repeat)

profile off;
profile on; 
testAdd(repeat);
testAssign(repeat);
profile off;
data = profile('info');
profshow(data, 5); 

end

function testAdd(repeat)
for i = 1:repeat
    A = ones(100, 1); 
    B = ones(100, 1); 
    for j = 1:10000
        A = [A B]; 
    end 
end
end

function testAssign(repeat)
for i = 1:repeat
    B = ones(100, 1); 
    A = zeros(100, 10000);
    for j = 2:10001
        A(:, j) = B;
    end 
end
end

这是结果

octave:1> testAppend(1)
   #              Function Attr     Time (s)        Calls
---------------------------------------------------------
   1    testAppend>testAdd             9.454            1
   3 testAppend>testAssign             0.023            1
   4                 zeros             0.001            1
   5               profile             0.000            1
   2                  ones             0.000            3

因此,如果您需要不断增长矩阵,请先创建目标矩阵,然后为其指定值。如果你事先不知道最终的维度,或者实现像resizing-matrix这样的东西。

答案 4 :(得分:2)

函数padarray(来自image package)的目的就是为此。

octave> b = 2 * eye (3)
b =

Diagonal Matrix

   2   0   0
   0   2   0
   0   0   2

octave> padarray (b, [0 1], 1, "pre")
ans =

   1   2   0   0
   1   0   2   0
   1   0   0   2

函数读取预填充变量b,其中包含0行和1列。该函数在填充矩阵时允许很大的灵活性,但对于非常简单的东西可能有点过分。

答案 5 :(得分:0)

b矩阵定义如下

int, string

通过添加新的1s列来创建新矩阵,如下所示:

>> b = [1 2 3;4 5 6;7 8 9]
b =

   1   2   3
   4   5   6
   7   8   9

通过添加如下所示的新的1s行来创建新矩阵

>> [ones(size(b), 1) b]
ans =

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

答案 6 :(得分:0)

您有一个3x3的矩阵,例如

b = 2 * eye(3)
ans =

2   0   0
0   2   0
0   0   2

您可以在下面添加一列,并接收新的4x3矩阵

[ones(size(b, 1), 1) b]
ans =

1   2   0   0
1   0   2   0
1   0   0   2

您可以如下添加一行,并接收新的3x4矩阵

[ones(1,size(b, 2)); b]
ans =

1   1   1
2   0   0
0   2   0
0   0   2