对于一个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]])
型
当我使用布尔数组时,它会检查每个数字。如何一次比较整行?
5条答案
按热度按时间laik7k3q1#
尝试使用:
字符串
d6kp6zgx2#
你的数组和搜索数组:
字符串
对于(5,3)和(3,)形状,我们可以将其与以下进行比较:
型
这利用广播将
x
视为(1,3)。在其他情况下,我们可能需要调整阵列以进行适当的广播。我们可以找到完全匹配的行,都是True:
型
如果我们使用这个布尔数组来索引
arr
的第一个维度,我们会得到[1,0,1]行:型
我们可以使用相同的索引来替换这些行的值(同样,这使用广播将(3,)数组放入(2,3)槽中:
型
这是
numpy
广播、索引和轴缩减的一个很好的练习。ymdaylpp3#
np.sign()
应该可以帮助您比较整行。字符串
最好循环遍历数组检查
np.sign(array[i]-array[j])
。https://numpy.org/doc/stable/reference/generated/numpy.sign.html
jhdbpxl94#
假设你的数组只包含正值,并且你想在最后一个轴上进行比较,你可以执行以下操作:
字符串
gzszwxb45#
Numpy中有一个名为
array_equal
的内置函数,用于比较两个数组是否相等。我想这就是你要使用的功能。下面是它的文档:https://numpy.org/doc/stable/reference/generated/numpy.array_equal.html的数据。