我需要在matlab中使用3D矩阵,我还有另一个2D矩阵(7570x3), 除了2D矩阵中应具有1个值的所有维度之外,3D矩阵应该具有零个数字。我怎样才能做到这一点。
即。 2D矩阵(1,:) = 28,64,27然后3d(27,64,27)应为1
我该怎么做?
答案 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;