构造具有线性索引

时间:2015-08-05 10:08:47

标签: matlab matrix

我想根据一组数据构建一个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矩阵AB,然后使用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矩阵。

感谢您的帮助。

1 个答案:

答案 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)