Cách hiệu quả (tốc độ) để áp dụng các chức năng Piecewise trên Numpy Array là gì?Chức năng Piecewise trên Numpy Arrays
Say, ví dụ, chức năng piecewise giống như
For (1) : x<=2 f(x) = 2*x + x^2
(2) : x>2 f(x) = -(x^2 + 2)
Đây là những gì tôi đã làm.
data = np.random.random_integers(5, size=(5,6))
print data
np.piecewise(data, [data <= 2, data > 2],
[lambda x: 2*x + pow(2, x),
lambda x: -(pow(x, 2) + 2)])
data =
[[4 2 1 1 5 3]
[4 3 3 5 4 5]
[3 2 4 2 5 3]
[2 5 4 3 1 4]
[5 3 3 5 5 5]]
output =
array([[-18, 8, 4, 4, -27, -11],
[-18, -11, -11, -27, -18, -27],
[-11, 8, -18, 8, -27, -11],
[ 8, -27, -18, -11, 4, -18],
[-27, -11, -11, -27, -27, -27]])
Có phương pháp hiệu quả để đi theo mảng nhỏ hơn, mảng lớn, nhiều chức năng, v.v ... không? Mối quan tâm của tôi là với các hàm lambda đang được sử dụng. Không chắc chắn nếu chúng được tối ưu hóa Numpy.
Câu trả lời hay. Một lợi thế khác của việc sử dụng 'np.select()' hoặc 'np.where()' là sau đó bạn có quyền truy cập vào toàn bộ mảng khi thực hiện các phép tính. Nếu hàm của bạn phụ thuộc vào các giá trị khác trong đầu vào (ví dụ, các giá trị lân cận của mỗi điểm), điều này sẽ hữu ích. Nhưng trong trường hợp của OP nó không quan trọng, và 'np.piecewise()' là tốt. –