将矢量重新排列成矩阵

时间:2016-06-18 15:35:18

标签: matlab matrix

我有数据,按以下顺序排列

test_data

现在,您可以看到每个x值都有不同的y值以及一些real和img值。 x的维度为m x 1y的维度为n x 1。现在我想以新矩阵的维度为m x n的方式在新矩阵中排列数据。换句话说,x将是我的行,y的值将是我的列,相应地,对于每个xy,值将进入新矩阵,如下所示。

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

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

你得到的是矩阵的稀疏表示。使用稀疏构造函数是获取矩阵的最简单(但可能不是最快)的方法:

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