我有两个3D矩阵A和B.A和B的大小都是40 * 40 * 20的两倍。 矩阵A和B中的值为0或1." 1"在A是100, " 1"在B中是50." 1"在矩阵A和B中可能有也可能不在 相同的坐标。我想得到矩阵A和B的并集,称为C.三维矩阵C中的值是" 1"或" 0"。 " 1"的数量在C中小于或等于150.我的问题是如何在Matlab中获得3D矩阵?
答案 0 :(得分:1)
您可以使用logical or
运算符or。因此or(a,b)
等同于逻辑操作a | b
。
C = or(A,B);
C = a | b;
|
和or
在MatLab中是相同的运算符,只是两种不同的方式来调用它。
我认为这是最好的解决方案,只要它集成到MatLab中即可。但是,你有很多不同的方法可以做到这一点。
举个例子,你可以做到
C = logical(a+b);
logical
是一个将每个值转换为逻辑值的运算符。简而言之,它将取代0
1
之间的任何不同价值。
答案 1 :(得分:0)
您可以通过两种方式接近它。使用向量的效率越高,但您也可以在经典的嵌套for循环中进行。
A = rand(40,40,20);
A = A > 0.01; # Get approximate 320 ones and rest zeros
B = rand(40,40,20);
B = B > 0.005; # Get approximate 160 ones and rest zeros
C = zeros(size(A));
for iter1 = 1:size(A,1)
for iter2 = 1:size(A,2)
for iter3 = 1:size(A,3)
C(iter1,iter2,iter3) = A(iter1,iter2,iter3)|B(iter1,iter2,iter3)
end
end
end
这种方法会很慢。您可以对其进行矢量化以提高性能
C = A|B