2013-01-20 38 views
6

Có thể thực hiện phân bổ tối thiểu/tối đa tại chỗ với mảng nhiều chiều NumPy mà không cần sao chép thêm không?NumPy min/max tại chỗ gán

Say, ab là hai mảng NumPy 2D và tôi muốn có a[i,j] = min(a[i,j], b[i,j]) cho tất cả ij.

Một cách để làm điều này là:

a = numpy.minimum(a, b) 

Tuy nhiên, theo các tài liệu, numpy.minimum tạo và trả về một mảng mới:

numpy.minimum (x1, x2 [, ra])
Tối thiểu yếu tố mảng yếu tố.
So sánh hai mảng và trả về một mảng mới chứa minima yếu tố.

Vì vậy, trong đoạn code trên, nó sẽ tạo ra một mảng tạm thời mới (tối thiểu ab), sau đó gán nó vào a và vứt bỏ nó, phải không?

Có cách nào để thực hiện điều gì đó như a.min_with(b) sao cho kết quả tối thiểu được gán trở lại a tại chỗ?

Trả lời

9

numpy.minimum() lấy đối số thứ ba tùy chọn, là mảng đầu ra. Bạn có thể chỉ định a tại đó để nó được sửa đổi tại chỗ:

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

Thực tế nó có tham số thứ ba. Cảm ơn! :) – alveko

+0

Nó sẽ cải thiện câu trả lời một chút để in 'id (a)' trước và sau. –

+0

@ jwpat7: Tôi không bận tâm vì không có cách nào đơn giản chỉ cần gọi một hàm có thể rebind 'a' để trỏ đến một đối tượng khác. – NPE

Các vấn đề liên quan