Giả sử tôi có một mảng trong NumPy chứa các đánh giá của một hàm có khả năng liên tục khác nhau và tôi muốn tìm minima cục bộ. Không có tiếng ồn, vì vậy mọi điểm có giá trị thấp hơn giá trị của tất cả các nước láng giềng đều đáp ứng tiêu chí của tôi cho một mức tối thiểu địa phương.Làm thế nào để tìm minima địa phương của một mảng đa chiều trơn tru trong NumPy hiệu quả?
Tôi có hiểu danh sách sau đây mà làm việc cho một mảng hai chiều, bỏ qua tiểu tiềm năng về ranh giới:
import numpy as N
def local_minima(array2d):
local_minima = [ index
for index in N.ndindex(array2d.shape)
if index[0] > 0
if index[1] > 0
if index[0] < array2d.shape[0] - 1
if index[1] < array2d.shape[1] - 1
if array2d[index] < array2d[index[0] - 1, index[1] - 1]
if array2d[index] < array2d[index[0] - 1, index[1]]
if array2d[index] < array2d[index[0] - 1, index[1] + 1]
if array2d[index] < array2d[index[0], index[1] - 1]
if array2d[index] < array2d[index[0], index[1] + 1]
if array2d[index] < array2d[index[0] + 1, index[1] - 1]
if array2d[index] < array2d[index[0] + 1, index[1]]
if array2d[index] < array2d[index[0] + 1, index[1] + 1]
]
return local_minima
Tuy nhiên, điều này là khá chậm. Tôi cũng muốn làm việc này cho bất kỳ số thứ nguyên nào. Ví dụ, có một cách dễ dàng để có được tất cả những người hàng xóm của một điểm trong một mảng của bất kỳ kích thước? Hoặc tôi đang tiếp cận vấn đề này một cách sai lầm hoàn toàn? Tôi có nên sử dụng numpy.gradient()
để thay thế không?
Tìm tối đa toàn cầu: http://stackoverflow.com/questions/3584243/python-get-the-position-of-the-biggest-item-in-an-numpy-array/3584260#3584260 – endolith