Tôi có ma trận vuông lớn (xấp xỉ 14.000 x 14.000) được biểu thị dưới dạng Numpy ndarray
. Tôi muốn trích xuất một số lượng lớn các hàng và cột - các chỉ số mà tôi biết trước, mặc dù thực tế tất cả các hàng và cột không phải là tất cả các số không - để có được một ma trận vuông mới (xấp xỉ 10.000 x 10.000).Cách nhanh nhất để trích xuất các hàng và cột đã cho từ một Numpy ndarray là gì?
Cách nhanh nhất tôi đã tìm thấy để làm điều này là:
> timeit A[np.ix_(indices, indices)]
1 loops, best of 3: 6.19 s per loop
Tuy nhiên, đây là chậm hơn nhiều so với thời gian cần thiết để làm phép nhân ma trận:
> timeit np.multiply(A, A)
1 loops, best of 3: 982 ms per loop
Điều này có vẻ kỳ lạ, vì cả phép tách hàng và cột và phép nhân ma trận cần phân bổ một mảng mới (sẽ còn lớn hơn cho kết quả phép nhân ma trận so với phép trích xuất), nhưng phép nhân ma trận cũng cần thực hiện tính toán bổ sung.
Do đó, câu hỏi: có cách nào hiệu quả hơn để thực hiện việc trích xuất, cụ thể, ít nhất là nhanh như phép nhân ma trận?
Tôi nghi ngờ nhân ma trận lý do nhanh là vì nó sử dụng tất cả các phần tử của mảng theo cách nghiêm ngặt và được tối ưu hóa để làm như vậy. Nếu bạn phải vượt qua các chỉ số tùy ý (nghĩa là, không phải là một lát hình chữ nhật), bạn sẽ không nhận được tốc độ tối đa. – BrenBarn
vâng, sử dụng numpy 1.9 – seberg
'np.multiply (A, A)' là * phần tử * nhân. Sử dụng 'np.dot (A, A)' để nhân ma trận. –