Tôi có một hàm có nhiều tham số. Thay vì đặt tất cả các tham số theo cách thủ công, tôi muốn thực hiện tìm kiếm lưới. Tôi có một danh sách các giá trị có thể cho mỗi tham số. Đối với mọi kết hợp các thông số có thể, tôi muốn chạy hàm của mình báo cáo hiệu suất của thuật toán của tôi trên các tham số đó. Tôi muốn lưu trữ các kết quả của điều này trong một ma trận nhiều chiều, vì vậy mà từ sau tôi chỉ có thể tìm thấy chỉ số của hiệu suất tối đa, mà lần lượt sẽ cho tôi những thông số tốt nhất. Sau đây là cách mã được viết tại:Tìm kiếm lưới thanh lịch trong python/numpy
param1_list = [p11, p12, p13,...]
param2_list = [p21, p22, p23,...] # not necessarily the same number of values
...
results_size = (len(param1_list), len(param2_list),...)
results = np.zeros(results_size, dtype = np.float)
for param1_idx in range(len(param1_list)):
for param2_idx in range(len(param2_list)):
...
param1 = param1_list[param1_idx]
param2 = param2_list[param2_idx]
...
results[param1_idx, param2_idx, ...] = my_func(param1, param2, ...)
max_index = np.argmax(results) # indices of best parameters!
Tôi muốn giữ lại phần đầu tiên, nơi tôi xác định danh sách như nó vốn có, vì tôi muốn một cách dễ dàng có thể thao tác các giá trị trên mà tôi tìm kiếm.
Tôi cũng muốn kết thúc với ma trận kết quả như vậy, vì tôi sẽ hình dung cách thay đổi các thông số khác nhau ảnh hưởng đến hiệu suất của thuật toán. Một chút ở giữa, mặc dù, là khá lặp đi lặp lại và cồng kềnh (đặc biệt là bởi vì tôi có rất nhiều tham số, và tôi có thể muốn thêm hoặc loại bỏ các thông số), và tôi cảm thấy cần phải có một cách gọn gàng hơn/thanh lịch hơn để khởi tạo ma trận kết quả, lặp lại tất cả các chỉ mục và thiết lập các tham số thích hợp.
Vì vậy, có?
có vẻ như bạn đang tìm kiếm 'itertools.product' –
Ahh, thật vậy! Điều này sẽ đơn giản hóa mọi thứ một chút! – dlants
về cơ bản, đây là bản sao gần: http://stackoverflow.com/questions/1316068/pythonic-way-of-iterating-over-3d-array –