2016-06-18 41 views
0

我有数据,并有不同的y值分别一些真正和IMG值它被安排在下列顺序重新排列向量到矩阵

test_data

现在你可以看到每个x值。 x具有尺寸m x 1y具有尺寸n x 1。现在我想要以新矩阵的维数为m x n的方式将数据排列在新矩阵中。换句话说,x将成为我的行,y的值将成为我的列,相应地,对于每个xy,该值将进入如下的新矩阵。

new_matrix(m,n)= real*exp{img} 

即对于每个xy值的实部应与虚数部分的指数相乘,并进入新的矩阵。

回答

1

MATLAB使用列主索引,所以如果您创建的矩阵是m x n然后填充它,它会首先填满行,然后填充列。您的订单按主要订单排序(如果不是,我们可以使用sortrows来确保它是)。然后,我们可以使用最后两列计算real * exp(imag),并将其重新设置为n x m,然后转置它以获取您的m x n矩阵。

data = [0 1 25 12 
     0 2 15 26 
     1 1 78 26 
     1 2 25 63 
     2 1 26 35 
     2 2 45 63 
     3 1 56 26 
     3 2 48 2]; 

% Ensure that the data is in the correct order 
data = sortrows(data); 

% Determine the size of the output matrix 
m = numel(unique(data(:,1))); 
n = numel(unique(data(:,2))); 

% Compute real * exp(imag) and make it the correct shape 
out = reshape(data(:,3) .* exp(data(:,4)), n, m).'; 

% 4.0689e+06 2.9359e+12 
% 1.5267e+13 5.7345e+28 
% 4.1236e+16 1.0322e+29 
% 1.0961e+13 3.5467e+02 
1

你得到的是一个矩阵的稀疏表示。使用稀疏constructior是最简单的(但可能不是最快)的方式来获得您的矩阵:

full(sparse(data(:,1)+1,data(:,2),data(:,3) .* exp(data(:,4))))