使用数组2D(i:3)在matlab中创建3D(n:m:k)矩阵

时间:2013-11-30 07:32:55

标签: matlab matrix 3d

我需要在matlab中使用3D矩阵,我还有另一个2D矩阵(7570x3),  除了2D矩阵中应具有1个值的所有维度之外,3D矩阵应该具有零个数字。我怎样才能做到这一点。

即。 2D矩阵(1,:) = 28,64,27然后3d(27,64,27)应为1

我该怎么做?

2 个答案:

答案 0 :(得分:1)

假设a是您的二维矩阵,b是三维矩阵,请按以下方式使用sub2ind

b=false(max(a));  % preallocate memory for a logical zeros matrix b
b(sub2ind(size(b),a(:,1),a(:,2),a(:,3))) = 1;

查看max(a)为您提供的内容,了解您是否可以托管size(max(a)的三维矩阵。由于您对logcial矩阵(1和0)感兴趣,因此内存中矩阵的大小与元素数n*m*l相同,因此1000x1000x1000将占用1 GB。

注意,很可能b非常稀疏,如果是这种情况,您可以参考this thread来了解如何处理它。知道此刻,据我所知,matlab不支持3d稀疏矩阵。因此,您可能需要检查FEX中的this option。当我想到它时,你已经有了一个稀疏的3D矩阵查找表!它只是你开始使用的2D矩阵......

答案 1 :(得分:0)

非常感谢@natan

对于非整数矩阵也可以使用:

b=false(floor(max(a)));  % preallocate memory for a logical zeros matrix b
b(sub2ind(size(b),floor(a(:,1)),floor(a(:,2)),floor(a(:,3)))) = 1;

或使用圆函数:

b=false(round(max(a)));  % preallocate memory for a logical zeros matrix b
b(sub2ind(size(b),round(a(:,1)),round(a(:,2)),round(a(:,3)))) = 1;