2012-11-17 5 views
6

Có vẻ như không phải là một phương pháp trong scipy.sparse mang lại tối thiểu một ma trận thưa thớt. Đặc biệt, tôi tìm kiếm tối thiểu các cột.tối thiểu của ma trận thưa thớt?

Không có phương pháp nào xuất hiện trong tài liệu và tối thiểu tối thiểu không áp dụng. Nếu X là ma trận thưa thớt, X.min() cũng sẽ phát ra lỗi: *** AttributeError: 'module' object has no attribute 'min'.

Chắc chắn đây phải là thứ mà mọi người sử dụng. Làm thế nào được thực hiện?

+1

Có lẽ bạn có nghĩa là "yếu tố không phải không tối thiểu". Sau khi tất cả, một ma trận thưa thớt ngầm chứa hầu hết các số không. – talonmies

+0

Không - ý tôi là "tối thiểu". Ma trận thưa thớt có thể có các mục nhập âm. larsmans câu trả lời cho điều này. – gabe

+0

Mục nhập âm trong ma trận thưa thớt cũng là giá trị khác 0. – talonmies

Trả lời

7

Với ma trận CSR/CSC, sử dụng

def min_sparse(X): 
    if len(X.data) == 0: 
     return 0 
    m = X.data.min() 
    return m if X.getnnz() == X.size else min(m, 0) 

Để làm điều này mỗi hàng hoặc cột, bạn có thể map này qua X.getrow(i) for i in X.shape[0] hoặc X.shape[1].

Nhưng bạn nói đúng, đây phải là một phương pháp.

+0

Cảm ơn - bạn thật tuyệt vời! Tôi sẽ gửi đến danh sách scipy. – gabe

+0

Ngoài ra - bạn nên biết về thuộc tính .data cho ma trận thưa thớt. (Tôi tin) điều này không được đề cập trong hướng dẫn. – gabe

+1

Ngoài ra - bạn có thể giải thích tại sao bạn trả lại 'm' nếu' X.getnnz() == X.size'? Tôi chỉ nhìn vào mã thực tế và điều này luôn luôn đúng. Tôi thấy rằng 'm' là thứ bạn muốn trả về - nhưng tôi không hiểu logic trả về của bạn. – gabe