0

我需要根据矩阵另一列中相等的一组值将向量转置为二维矩阵。例如:

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

应该看起来像:

x1 x2 x3 x4;
x5 x6 x7 x8;

这与您在 SAS 中使用 proc tabulate 执行的过程相同。Reshape 对我不起作用,因为它没有转置它,并且尝试 permute 也没有运气。除了必须使用 find、transpose 和 vertcat 对其进行编程之外,是否有任何内置命令可以执行此操作?

4

1 回答 1

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矩阵。

于 2012-09-24T00:56:34.053 回答