如何获得两个3D矩阵的联合?

时间:2015-07-19 22:14:39

标签: matlab matrix

我有两个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矩阵?

2 个答案:

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