我想在矩阵的开头添加一个值,例如,我的矩阵是
0,0,0,0,0,0
0,1,1,1,0,0
1,0,0,1,0,0
1,1,1,0,0,0
然后我想在第一列添加'1'或'0'因此它会变成这样
1,0,0,0,0,0,0
1,0,1,1,1,0,0
1,1,0,0,1,0,0
1,1,1,1,0,0,0
0,0,0,0,0,0,0
0,0,1,1,1,0,0
0,1,0,0,1,0,0
0,1,1,1,0,0,0
我怎么能在MATLAB中做到这一点?
答案 0 :(得分:5)
您可以连接矩阵而无需像这样从头开始创建另一个矩阵:
% your matrix
A = [ 0,0,0,0,0,0;
0,1,1,1,0,0;
1,0,0,1,0,0;
1,1,1,0,0,0 ];
A_with_zeros = [zeros(size(A,1),1) A]
A_with_ones = [ones(size(A,1),1) A]
% Output:
% A_with_zeros = [ 0 0 0 0 0 0 0
% 0 0 1 1 1 0 0
% 0 1 0 0 1 0 0
% 0 1 1 1 0 0 0 ]
%
% A_with_ones = [ 1 0 0 0 0 0 0 0
% 1 0 0 1 1 1 0 0
% 1 0 1 0 0 1 0 0
% 1 0 1 1 1 0 0 0 ]
关于连接矩阵的文档:
这两个文档页面详细描述了现有方法,这些方法可以让您水平连接数组(我在上面的例子中做了什么)和垂直连接数组(如果你想在矩阵中添加行)。
答案 1 :(得分:2)
使用数组连接语法 - [a b]
将矩阵水平粘合在一起,[a; b]
将它们垂直粘合在一起。
像这样:
>> a = ones(3,1)
a =
1
1
1
>> b = magic(3)
b =
8 1 6
3 5 7
4 9 2
>> c = [a b]
c =
1 8 1 6
1 3 5 7
1 4 9 2
垂直:
>> d = ones(1,3)
d =
1 1 1
>> e = [d; b]
e =
1 1 1
8 1 6
3 5 7
4 9 2
如果尺寸不匹配,MATLAB会给您一个错误。不要这样做:
>> f = ones(1,10)
f =
1 1 1 1 1 1 1 1 1 1
>> g = magic(3)
g =
8 1 6
3 5 7
4 9 2
>> [f; g]
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.
答案 2 :(得分:0)
创建一个带有额外列的新矩阵,复制旧矩阵,然后将新列的数据放入at(:,1)。
output = zeros(size(input, 1), size(input, 2) + 1);
output(:, 2:end) = input;
output(:, 1) = new_column;
或者如果你想要获得两个基质,一个列为1,一个列为0:
output0 = zeros(size(input, 1), size(input, 2) + 1);
output0(:, 2:end) = input;
output1 = ones(size(input, 1), size(input, 2) + 1);
output1(:, 2:end) = input;