Tôi cảnh báo trước: Tôi có thể hoàn toàn bị nhầm lẫn vào lúc này. Tôi kể một câu chuyện ngắn về những gì tôi thực sự cố gắng đạt được vì điều đó có thể làm rõ mọi thứ. Giả sử tôi có f(a,b,c,d,e)
và tôi muốn tìm arg max (d,e) f(a,b,c,d,e)
. Hãy xem xét một (ví dụ nhỏ của a) rời rạc hóa lưới F
của f
:Đánh giá mảng tại subarray cụ thể
F = np.tile(np.arange(0,10,0.1)[newaxis,newaxis,:,newaxis,newaxis], [10, 10, 1, 10, 10])
maxE = F.max(axis=-1)
argmaxD = maxE.argmax(axis=-1)
maxD = F.max(axis=-2)
argmaxE = maxD.argmax(axis=-1)
Đây là trường hợp như thế nào tôi thường giải quyết các phiên bản rời rạc. Nhưng bây giờ giả sử thay vào đó, rằng tôi muốn giải quyết arg max d f(a,b,c,d,e=X)
: Thay vì được chọn một cách tối ưu e
cho mọi đầu vào khác, e
là một cố định và được đưa ra (có kích thước AxBxCxD, trong ví dụ này sẽ là 10x10x100x10
). Tôi gặp khó khăn trong việc giải quyết vấn đề này.
cách tiếp cận ngây thơ của tôi là
X = np.tile(np.arange(0,10)[newaxis,newaxis,:,newaxis], [10,10,1,10])
maxX = F[X]
argmaxD = maxX.argmax(axis=-1)
Tuy nhiên, sự gia tăng rất lớn của bộ nhớ mà treo IDE của tôi ngụ ý rằng F[X]
là rõ ràng không phải là điều tôi đang tìm kiếm.
Hiệu suất là chìa khóa.
có vẻ như những gì bạn muốn là một cái gì đó như: 'np.argmax (np.max (F, trục = -1), trục = -1)' –