在没有for循环的情况下比较Numpy中两个3D矩阵的排列方式

时间:2019-02-19 14:36:26

标签: python arrays numpy comparison vectorization

所有Numpy专家,对于你们来说,这可能很简单。这个问题应该存在,但我没有找到确切解决的方法。 Comparing two matrices row-wise by occurrence in NumPyNumpy compare array to multiple scalars at once类似,但不完全相同。

我需要为多维数组计算numpy.array_equal,但是我很确定我不需要使用双for循环。但是,如果我使用双for循环进行计算,它将如下所示:

M = numpy.array(
     [
         [
            [1,2,3],
            [1,3,4]
         ],
         [
            [3,4,5],
            [1,2,3]
         ],
         [
            [1,2,3],
            [1,3,4]
         ]
     ])

result = np.zeros((M.shape[0], M.shape[0]))
for i in range(M.shape[0]):
    for j in range(M.shape[0]):
        result[i,j] = numpy.array_equal(M[i], M[j])

我应该以一个M.shape[0]^2大的真值表结尾,其中至少对角线为真。

1 个答案:

答案 0 :(得分:2)

扩展后的杠杆broadcasting- 两个Wait()版本的输入,以便我们可以沿第一个轴相互比较 pairiwise-array-blocks ,同时保持最后两个轴对齐-

ValueTask<T>

我们可以使用最后两个轴作为html2pdf->setTestTdInOnePage(false); 的输入,将其扩展到通用n维数组的情况-

4D

利用result = (M[:,None] == M).all((2,3)) 来提高存储效率,从而提高性能-

.all()

大型阵列上的计时-

(M[:,None] == M).all((-2,-1))

原始版本-

views

结论将是-删除循环,但要注意内存使用情况。如果可能的话,找到其他方法来保持向量化和内存高效。