在numpy中,如何比较轴中的所有值

dy2hfwbg  于 2023-08-05  发布在  其他
关注(0)|答案(5)|浏览(81)

对于一个numpy数组,我如何才能只在一个轴沿着的所有元素都等于另一个数组时才更改值?比如...

array = np.array([[1, 0, 1],
                  [0, 0, 1],
                  [1, 1, 0],
                  [0, 0, 0],
                  [1, 0, 1]])

字符串
我想用[1, 1, 1]替换所有的[1, 0, 1]...所以array变成

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


当我使用布尔数组时,它会检查每个数字。如何一次比较整行?

laik7k3q

laik7k3q1#

尝试使用:

array[(array == [1, 0, 1]).all(axis=1)] = [1, 1, 1]

字符串

d6kp6zgx

d6kp6zgx2#

你的数组和搜索数组:

In [87]: arr = np.array([[1, 0, 1], 
    ...:                   [0, 0, 1], 
    ...:                   [1, 1, 0], 
    ...:                   [0, 0, 0], 
    ...:                   [1, 0, 1]])                                                  
In [88]: x = np.array([1,0,1])

字符串
对于(5,3)和(3,)形状,我们可以将其与以下进行比较:

In [89]: arr == x                                                                       
Out[89]: 
array([[ True,  True,  True],
       [False,  True,  True],
       [ True, False, False],
       [False,  True, False],
       [ True,  True,  True]])


这利用广播将x视为(1,3)。在其他情况下,我们可能需要调整阵列以进行适当的广播。
我们可以找到完全匹配的行,都是True:

In [90]: (arr == x).all(axis=1)                                                         
Out[90]: array([ True, False, False, False,  True])


如果我们使用这个布尔数组来索引arr的第一个维度,我们会得到[1,0,1]行:

In [96]: arr[(arr == x).all(axis=1)]                                                    
Out[96]: 
array([[1, 0, 1],
       [1, 0, 1]])


我们可以使用相同的索引来替换这些行的值(同样,这使用广播将(3,)数组放入(2,3)槽中:

In [97]: arr[(arr == x).all(axis=1)]=[1,1,1]                                            
In [98]: arr                                                                            
Out[98]: 
array([[1, 1, 1],
       [0, 0, 1],
       [1, 1, 0],
       [0, 0, 0],
       [1, 1, 1]])


这是numpy广播、索引和轴缩减的一个很好的练习。

ymdaylpp

ymdaylpp3#

np.sign()应该可以帮助您比较整行。

np.sign([1,0,1] - [1,0,1])  # returns 0

字符串
最好循环遍历数组检查np.sign(array[i]-array[j])
https://numpy.org/doc/stable/reference/generated/numpy.sign.html

jhdbpxl9

jhdbpxl94#

假设你的数组只包含正值,并且你想在最后一个轴上进行比较,你可以执行以下操作:

(a - a[..., [0]]).sum(-1) == 0

字符串

gzszwxb4

gzszwxb45#

Numpy中有一个名为array_equal的内置函数,用于比较两个数组是否相等。我想这就是你要使用的功能。
下面是它的文档:https://numpy.org/doc/stable/reference/generated/numpy.array_equal.html的数据。

相关问题