在Matlab中按组转换1D到2D

时间:2012-09-23 21:32:46

标签: matlab vector matrix

我需要根据一组在矩阵的另一列中相等的值将矢量转换为2D矩阵。例如:

1 x1
1 x2
1 x3
1 x4
2 x5
2 x6
2 x7
2 x8

应该是这样的:

x1 x2 x3 x4;
x5 x6 x7 x8;

这与使用proc制表符在SAS中执行的操作相同。重塑对我来说不起作用,因为它没有转置它,并且试图在没有运气的情况下进行转换。除了必须使用find,transpose和vertcat进行编程之外,是否还有内置命令可以执行此操作?

1 个答案:

答案 0 :(得分:0)

如果由于某种原因你想避免使用reshape,虽然注释中的解决方案可行,但您可以使用sub2ind来获取新矩阵V的线性索引,前提是您的第一列将会总是提供新的线子:

X = [[1,1,1,1,2,2,2,2]' (1:8)'];
subs = X(:,1);

M = length(unique(subs)); % count unique ids
N = length(X)./M; % Problem assumption: M sets of size N (MxN=length(X))

V = zeros(M, N);
i = sub2ind([M, N], subs, repmat(1:N,1,M)');
V(i) = X(:,2);

根据您的规范,只要X中有相同数量的唯一元素,上述内容就会生效,因此您可以形成MxN矩阵。