NumPy最小值/最大值的原地赋值

7

在NumPy多维数组中,是否可以进行原地最小/最大赋值操作而不需要额外的复制?

假设a和b是两个二维NumPy数组,我想让所有的i和j都满足 a[i,j] = min(a[i,j], b[i,j])

有一种方法可以实现:

a = numpy.minimum(a, b)

根据文档,numpy.minimum创建并返回一个新的数组:

numpy.minimum(x1, x2[, out])
数组元素逐个比较取其最小值。
比较两个数组并返回包含逐个元素最小值的新数组

因此,在上面的代码中,它将创建一个新的临时数组(ab的最小值),然后将其分配给a并处理掉,对吗?
有没有办法像a.min_with(b)这样做,以便将最小结果就地分配回a
1个回答

11

numpy.minimum() 接受第三个可选参数,即输出数组。您可以在这里指定 a 以使其就地修改:

numpy.minimum() 接受第三个可选参数,即输出数组。您可以在这里指定 a 以就地修改它:

In [9]: a = np.array([[1, 2, 3], [2, 2, 2], [3, 2, 1]])

In [10]: b = np.array([[3, 2, 1], [1, 2, 1], [1, 2, 1]])

In [11]: np.minimum(a, b, a)
Out[11]: 
array([[1, 2, 1],
       [1, 2, 1],
       [1, 2, 1]])

In [12]: a
Out[12]: 
array([[1, 2, 1],
       [1, 2, 1],
       [1, 2, 1]])

确实需要第三个参数。谢谢! :) - alveko
在打印答案之前和之后打印 id(a) 会稍微改善答案。 - James Waldby - jwpat7
@jwpat7:我没有费心,因为仅仅调用一个函数是不可能重新绑定a指向另一个对象的。 - NPE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接