Tôi có hai bằng độ dài mảng 1D NumPy, id
và data
, nơi id
là một chuỗi lặp lại, ra lệnh cho các số nguyên xác định tiểu cửa sổ trên data
. Ví dụ,Đoàn tự do max hoặc min trong một mảng NumPy
id data
1 2
1 7
1 3
2 8
2 9
2 10
3 1
3 -10
Tôi muốn kết hợp lại data
bằng cách nhóm trên id
và không lấy được tối đa hoặc tối thiểu. Trong SQL, đây sẽ là một truy vấn tổng hợp điển hình như SELECT MAX(data) FROM tablename GROUP BY id ORDER BY id
. Có cách nào tôi có thể tránh các vòng Python và làm điều này một cách vectorized, hoặc tôi phải thả xuống C?
Cảm ơn @Bago, điều này mang lại hiệu suất tuyệt vời. Một điều tôi thấy hữu ích ở đây là có vẻ như lexsort sẽ luôn đặt giá trị NaN ở cuối các cửa sổ con. Vì vậy, nếu tôi muốn tìm, nói rằng, tối đa của mỗi cửa sổ không bao gồm NaN, tôi có thể lật dấu hiệu của dữ liệu, áp dụng công thức min, và sau đó lật lại dấu hiệu trên đường ra, chỉ với một hình phạt hiệu suất nhỏ. Mặt khác, nếu tôi thực sự muốn có một giá trị NaN được trả về nếu có một NaN ở bất kỳ đâu trong cửa sổ con, thì tôi để nguyên nó. – Abiel
Abiel, xem np.nanmax - max bỏ qua NaNs – denis
Giải pháp tốt. Hiếm khi đó là thời gian O (n log n) và bộ nhớ O (n), khi chúng ta biết nó có thể được giải quyết trong thời gian O (n) và O (k) đối với thùng k. Có lẽ numpy nên hỗ trợ 'binmax' cũng như' bincount'. – joeln