我想根据一组数据构建一个size = 80 * 80 * 2
的3D矩阵:
1 4532 1257.0
1 4556 1257.0
1 4622 257.0
1 4633 257.0
2 7723 31.0
2 8024 31.0
2 8099 31.0
2 9800 31.0
2 8524 34.0
2 8525 34.0
2 8700 734.0
2 8701 734.0
我现在所做的是:我首先获得两个80 * 80
2D矩阵A
和B
,然后使用cat(3, A, B)
连接它们:
将上述数据表示为M
。
for i = 1 : size(M,1)
if (M(:,1)==1)
[r c]=ind2sub(M(:,2));
A = accumarray([r c], M(:,3));
elseif (M(:,1)==2)
[r c]=ind2sub(M(:,2));
B = accumarray([r c], M(:,3));
end
end
cat(3, A, B)
我很好奇是否有任何解决方案只能通过线性索引(我的数据的第二列)或任何其他更简单的解决方案来构建80*80*2
矩阵。
感谢您的帮助。
答案 0 :(得分:1)
因此,我假设您的示例数据不正确,并且第2列中的所有值都小于n*n
,其中nxn
是矩阵的大小(在您的情况下为80x80) )。
如果是这样的话,以下两行应该可以解决问题。
out = zeros(n,n,2);
out((M(:,1)-1).*n^2+M(:,2)) = M(:,3)
如果第二列包含的值最多为2 * n * n,因此是线性指数,那么:
out = zeros(n,n,2);
out(M(:,2)) = M(:,3)