Matlab 构造具有线性索引的三维矩阵
我想基于一组数据构建一个大小为80*80*2的3D矩阵:Matlab 构造具有线性索引的三维矩阵,matlab,matrix,Matlab,Matrix,我想基于一组数据构建一个大小为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
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
矩阵
感谢您的帮助。因此,我假设您的示例数据不正确,第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)
80*80=6400. 线性索引怎么可能>6400?@stewie对于我的3d矩阵,它将是80*80*2。如果第一列出现
2
,则第二列减去6400似乎就是你的意思。非常感谢。第二个解决方案是“我的数据”的含义,它确实有效。