稀疏矩阵Python的等级

时间:2019-02-25 01:23:33

标签: python scipy sparse-matrix rank

我有一个稀疏的csr矩阵sparse.csr_matrix(A),我想为其计算矩阵等级

我知道两个选项:我可以将其转换为numpy矩阵或数组(.todense()或.toarray()),然后使用np.linalg.matrix_rank(A),这违背了我的目的使用稀疏矩阵格式,因为我的矩阵非常大。另一种选择是为矩阵计算SVD分解(sparse matrix svd in python),然后从中得出矩阵等级。

还有其他选择吗?目前,我是否有一种标准,最有效的方法来计算稀疏矩阵的秩?我在python中做线性代数相对较新,因此考虑到这一点的任何替代方法和建议将是最有帮助的。

1 个答案:

答案 0 :(得分:0)

我一直在使用import multiprocessing import time import random import queue def worker(input_queue, stop_event): while not stop_event.is_set(): try: # Check if any URL has arrived in the input queue. If not, # loop back and try again. url = input_queue.get(True, 1) input_queue.task_done() except queue.Empty: continue print('Started working on:', url) # Random delay to simulate fake processing. time.sleep(random.randint(1, 3)) print('Stopped working on:', url) def master(): urls = [ 'https://example.com/', 'https://example.org/', 'https://example.net/', 'https://stackoverflow.com/', 'https://www.python.org/', 'https://github.com/', 'https://susam.in/', ] input_queue = multiprocessing.JoinableQueue() stop_event = multiprocessing.Event() workers = [] # Create workers. for i in range(5): p = multiprocessing.Process(target=worker, args=(input_queue, stop_event)) workers.append(p) p.start() # Distribute work. for url in urls: input_queue.put(url) # Wait for the queue to be consumed. input_queue.join() # Ask the workers to quit. stop_event.set() # Wait for workers to quit. for w in workers: w.join() print('Done') if __name__ == '__main__': master() 方法并使用.todense()来计算答案。

到目前为止,它给了我令人满意的答复。