我有一个稀疏的csr矩阵sparse.csr_matrix(A),我想为其计算矩阵等级
我知道两个选项:我可以将其转换为numpy矩阵或数组(.todense()或.toarray()),然后使用np.linalg.matrix_rank(A),这违背了我的目的使用稀疏矩阵格式,因为我的矩阵非常大。另一种选择是为矩阵计算SVD分解(sparse matrix svd in python),然后从中得出矩阵等级。
还有其他选择吗?目前,我是否有一种标准,最有效的方法来计算稀疏矩阵的秩?我在python中做线性代数相对较新,因此考虑到这一点的任何替代方法和建议将是最有帮助的。
答案 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()
来计算答案。
到目前为止,它给了我令人满意的答复。