Tôi muốn viết một hàm bình thường hóa các hàng của một ma trận thưa thớt lớn (như vậy chúng tổng hợp thành một).Cách hiệu quả để chuẩn hóa một Ma trận thưa thớt Scipy
from pylab import *
import scipy.sparse as sp
def normalize(W):
z = W.sum(0)
z[z < 1e-6] = 1e-6
return W/z[None,:]
w = (rand(10,10)<0.1)*rand(10,10)
w = sp.csr_matrix(w)
w = normalize(w)
Tuy nhiên này cung cấp cho các ngoại lệ sau đây:
File "/usr/lib/python2.6/dist-packages/scipy/sparse/base.py", line 325, in __div__
return self.__truediv__(other)
File "/usr/lib/python2.6/dist-packages/scipy/sparse/compressed.py", line 230, in __truediv__
raise NotImplementedError
Có bất kỳ giải pháp hợp lý đơn giản? Tôi đã xem this, nhưng vẫn chưa rõ cách thực sự làm việc phân chia.
Về cơ bản, đây là bản sao của: http: //stackoverflow.c om/questions/12237954/multiplying-elements-in-a-sparse-array-với-rows-in-matrix vì nó không quan trọng nếu một hàng của nó theo phép nhân hoặc phép chia theo phần tử. Tất nhiên nếu ai đó có một câu trả lời tốt hơn, tuyệt vời :) – seberg
Tuyệt vời - cảm ơn! – sterne
Tôi không đồng ý, đây là một vấn đề khác. Bản sao bạn đã chỉ định nhân nhân tố khôn ngoan, trong khi câu hỏi này dường như muốn chia từng hàng theo một giá trị khác (chứ không phải tất cả các phần tử khác không bằng cùng một giá trị). Giải pháp của Aaron McDaid dưới đây sẽ hoạt động hiệu quả (và không yêu cầu sao chép dữ liệu). – conradlee