Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy比较两个3d阵列并找到相同的阵列_Python_Arrays_Numpy - Fatal编程技术网

Python Numpy比较两个3d阵列并找到相同的阵列

Python Numpy比较两个3d阵列并找到相同的阵列,python,arrays,numpy,Python,Arrays,Numpy,我有两个数组 mat = np.array( [ [[0,0],[0,1],[0,2]], [[1,0],[1,1],[1,2]], [[2,0],[2,1],[2,2]] ] ) mat2 = np.array( [ [[0,1],[0,1],[0,2]], [[1,0],[1,1],[1,2]], [[2,0],[2,2],[2,2]] ] ) 我想找到轴2中ma

我有两个数组

mat = np.array(
    [
        [[0,0],[0,1],[0,2]],
        [[1,0],[1,1],[1,2]],
        [[2,0],[2,1],[2,2]]
    ]
)
mat2 = np.array(
    [
        [[0,1],[0,1],[0,2]],
        [[1,0],[1,1],[1,2]],
        [[2,0],[2,2],[2,2]]
    ]
)
我想找到轴2中
mat
mat2
中相同的所有数组,并将它们转换为一个零数组。不同的是,如果每个数组
mat
mat2
都是RGB图像,我希望找到具有相同R、G、B值的像素,并返回具有相同像素设置为(0,0,0)的图像,其余像素保持不变

因此,我试图通过上述阵列实现的输出是:

[
    [[0, 1], [0, 0], [0, 0]],
    [[0, 0], [0, 0], [0, 0]],
    [[0, 0], [2, 2], [0, 0]]
]
我尝试了以下代码:

operated = np.where((mat2-mat==0).all(axis=2), np.array([0,0]), mat2)
然而,它会说:

ValueError: operands could not be broadcast together with shapes (3,3) (2,) (3,3,2) 
我认为这是因为对于轴2中的每个数组,它只返回一个
True
False
,如果像素相同,则应为
(True,True)
,如果不应执行减法,则应为
(False,False)

您可以根据以下条件替换数组中的值:

np.where((mat == mat2).all(axis=2,  keepdims=True), [0,0], mat2)

array([[[0, 1],
        [0, 0],
        [0, 0]],

       [[0, 0],
        [0, 0],
        [0, 0]],

       [[0, 0],
        [2, 2],
        [0, 0]]])
其中
(mat==mat2)。全部(axis=2,keepdims=True)

返回与
mat
尺寸相同的掩码,可以将其用作
np.where
的条件。然后,您只需根据结果指定是用
[0,0]
替换这些值还是用
mat2
替换这些值。

您可以根据以下条件替换数组中的值:

np.where((mat == mat2).all(axis=2,  keepdims=True), [0,0], mat2)

array([[[0, 1],
        [0, 0],
        [0, 0]],

       [[0, 0],
        [0, 0],
        [0, 0]],

       [[0, 0],
        [2, 2],
        [0, 0]]])
其中
(mat==mat2)。全部(axis=2,keepdims=True)



返回与
mat
尺寸相同的掩码,可以将其用作
np.where
的条件。然后您只需根据结果指定是用
[0,0]
还是用
mat2
替换这些值。

不应该是
[[0,1]、[0,0]、[0,0]、[0,0]、[0,0]、[0,0]、[0,0]、[0,0]、[0,0]、[0,0]、[[0,0]、[2,2]、[0,0]]]
?具体来说,第一行输出看起来是错误的。@Divakar这是一个输入错误,对不起。已修复。请将
keepdims=True
.all()
@Divakar一起使用。很抱歉,我对numpy还是新手,所以我不确定到底需要做什么。你能详细说明或包含代码吗?谷歌搜索文档-
numpy.all()
。那不应该是
[[0,1],[0,0],[0,0],[0,0],[0,0],[0,0],[2,2],[0,0]].
?具体来说,第一行输出看起来是错误的。@Divakar这是一个输入错误,对不起。已修复。请将
keepdims=True
.all()
@Divakar一起使用。很抱歉,我对numpy还是新手,所以我不确定到底需要做什么。你能详细说明或包含代码吗?谷歌搜索文档-
numpy.all()
。只有在数组轴2中第一项的减法在特定范围内时,才能进行减法吗?嗯,你能给我举个例子吗?你的意思是替换而不是减右?例如,
3
对于最后一个维度中的每个元素?感谢您的努力。只有在数组轴2中第一个项目的减法在特定范围内时才能进行减法吗?嗯,您能给我举个例子吗?您的意思是替换而不是减法对吗?例如,
3
?谢谢您的努力。