2016-06-08 73 views
2

我有一个大小为N(即N×1; N行,1列)的一维数组(例如A)。现在我想创建一个大小为N x 2(N行,2列)的数组,其数组A为一列,另一列为相同元素(下面给出示例中为0)。从N×1阵列创建N×2阵列-Matlab

对于e.g如果

A =[1;2;3;4;5]; 

我想创建一个矩阵B是

B=[0 1; 0 2; 0 3; 0 4; 0 5] 

如何在Matlab中做到这一点?

回答

6

您可以将B初始化为Nx2所有零的数组,然后将第二列分配给A中的值。

A = [1;2;3;4;5]; 

B = zeros(numel(A), 2); 
B(:,2) = A; 

% 0 1 
% 0 2  
% 0 3  
% 0 4  
% 0 5 

如果你真的只是想在第一列的零,你甚至不用初始化B作为MATLAB会自动在未知值填充0

% Make sure B isn't already assigned to something 
clear B 

% Assign the second column of uninitialized variable B to be equal to A 
B(:,2) = A; 
8

您也可以滥用bsxfun为一衬垫 -

bsxfun(@times,[0,1],A) 

或矩阵乘法对于隐式膨胀 -

A*[0,1] 
+3

爱这些方法(+1) – Suever

+0

@Divakar:我没有在这个方法我应该怎么做才能为非零值,明白了吗?例如,包含22的列和A. – Rhinocerotidae

+1

@SaravanaKumar您可以执行'bsxfun(@ plus,A * [0,1],[22,0])'。但为了提高效率,我建议用'B = 22 * ones(numel(A),2);'和B(:,2)= A;'来初始化'@ Suever的答案'。或者只是连接:'B = [22 * ones(numel(A),1)A]'。 – Divakar

0

你可以试试这个方法

B=[zeros(length(A),1) A]