cuốn sách gpt4 ai đã làm

python - Cách hiệu quả nhất để so sánh tất cả các giá trị trong từ điển?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 03:01:05 27 4
mua khóa gpt4 Nike

Tôi có một từ điển được tạo bằng cách đọc một loạt tệp hình ảnh. Nó trông như thế này:

files = { 'file1.png': [data...], 'file2.png': [data...], ... 'file1000': [data...]}

Tôi đang cố gắng xử lý những hình ảnh này để xem chúng giống nhau như thế nào. Vấn đề là, với hơn 1000 tệp dữ liệu, việc này sẽ mất rất nhiều thời gian. Tôi chắc chắn rằng tôi có 20 vị trí khác nhau mà tôi có thể tối ưu hóa, nhưng tôi đang cố gắng xem xét từng vị trí một để tìm hiểu cách tối ưu hóa nó tốt hơn.

Phương pháp ban đầu của tôi đã kiểm tra file1 với tất cả các tệp còn lại. Sau đó, tôi đã kiểm tra file2 với tất cả các tệp. Nhưng tôi vẫn thử nghiệm nó với file1. Vì vậy, khi tôi truy cập file1000 trong ví dụ trên, tôi thậm chí không cần kiểm tra bất cứ thứ gì vào thời điểm đó vì nó đã được kiểm tra 999 lần.

Đây là những gì tôi đã thử:

câu trả lời = {}
cho x trong các tập tin:
cho y trong các tập tin:
nếu y không có trong câu trả lời hoặc x không có trong câu trả lời[y]:
if(so sánh(files[x],files[y]) < 0,01):
câu trả lời.setdefault(x, []).append(y)

Điều này không hoạt động vì bây giờ tôi nhận được kết quả đầu ra sai. Hàm so sánh trông như thế này:

rms = math.sqrt(functools.reduce(operator.add,map(lambda a,b: (ab)**2, h1[0], h2[0]))/len(h1[0]))
trả lại rms

Tôi chỉ không muốn đưa phương trình khổng lồ đó vào câu lệnh if.

Có ai có cách hay để so sánh từng phân đoạn dữ liệu của từ điển tệp mà không có sự so sánh chồng chéo không?

biên tập:

Sau khi thử câu trả lời của ShadowRanger, tôi nhận ra rằng có lẽ tôi chưa hiểu hết những gì mình cần. Từ điển câu trả lời ban đầu của tôi trông như thế này:

{ 'file1.png': ['file1.png', 'file23.png', 'file333.png'],
'file2.png': ['file2.png'],
'file3.png': ['file3.png', 'file4.png', 'file5.png'],
'file4.png': ['file3.png', 'file4.png', 'file5.png'],
...}

Bây giờ tôi lưu trữ kết quả trong một tệp như thế này:

tập tin1.png tập tin23.png tập tin33.png
tập tin2.png
tập tin3.png tập tin4.png tập tin5.png
tập tin6.png
...

Tôi nghĩ bằng cách sử dụng kết hợp và chỉ kiểm tra từng tệp riêng lẻ một lần, tôi có thể tiết kiệm rất nhiều thời gian kiểm tra lại các tệp thay vì phải lãng phí thời gian để xóa các câu trả lời trùng lặp. Nhưng theo những gì tôi có thể nói, những sự kết hợp này thực sự làm giảm khả năng tìm thấy kết quả phù hợp của tôi và tôi không chắc tại sao.

câu trả lời hay nhất

Có thể tránh được sự so sánh dư thừawith itertools.combinations để có được các cặp duy nhất không phân biệt thứ tự .chỉNhập itertools và thay thế vòng lặp lồng nhau đôi của bạn:

cho x trong các tập tin:
cho y trong các tập tin:

Sử dụng một vòng lặp duy nhất để có được sự kết hợp:

cho x, y trong itertools.combinations(files, 2):

Giới thiệu về python - cách hiệu quả nhất để so sánh tất cả các giá trị trong từ điển? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/40878785/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress