NumPy最小/最大就地分配

时间:2013-01-20 19:11:24

标签: python numpy

是否可以使用NumPy多维数组执行最小/最大就地分配而无需额外的副本?

说,ab是两个2D numpy数组,我希望所有a[i,j] = min(a[i,j], b[i,j])i都有j

一种方法是:

a = numpy.minimum(a, b)

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

  

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

所以在上面的代码中,它会创建一个新的临时数组(min ab),然后将其分配给a并处理它,对吗?

有没有办法执行a.min_with(b)之类的操作,以便将最小结果分配回a就地?

1 个答案:

答案 0 :(得分:9)

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]])