Matlab 构造具有线性索引的三维矩阵

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

我想基于一组数据构建一个大小为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
矩阵


感谢您的帮助。

因此,我假设您的示例数据不正确,第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似乎就是你的意思。非常感谢。第二个解决方案是“我的数据”的含义,它确实有效。