小编ste*_*rne的帖子

标准化Scipy稀疏矩阵的有效方法

我想编写一个函数来规范化大型稀疏矩阵的行(使它们总和为1).

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)
Run Code Online (Sandbox Code Playgroud)

但是,这会产生以下异常:

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
Run Code Online (Sandbox Code Playgroud)

有没有相当简单的解决方案?我看过这个,但我还不清楚如何实际进行分组.

python numpy scipy sparse-matrix

23
推荐指数
1
解决办法
2万
查看次数

Python - 在多处理中使用线程

有人可以帮助我了解在 python 进程中使用线程的限制吗?

我附上了我想要实现的目标的最小工作示例。我的用例要求我启动多个进程,并且在每个进程中我有两个需要通信的线程。然而,即使在下面非常简单的示例中,我似乎也遇到了死锁/争用,并且根本不清楚出了什么问题。

import multiprocessing
from threading import Thread
import logging
import time
import sys


def print_all_the_things(char, num):
    try:
        while True:
            sys.stdout.write(char + str(num))
    except Exception:
        logging.exception("Something went wrong")


class MyProcess(multiprocessing.Process):
    def __init__(self, num):
        super(MyProcess, self).__init__()
        self.num = num

    def run(self):
        self.thread1 = Thread(target=print_all_the_things, args=("a", self.num))
        self.thread2 = Thread(target=print_all_the_things, args=("b", self.num))

        self.thread1.start()
        self.thread2.start()

procs = {}
for a in range(2):
    procs[a] = MyProcess(a)
    procs[a].start()

time.sleep(5)

for a in range(2):
    procs[a].join()
Run Code Online (Sandbox Code Playgroud)

预期输出是标准输出上“a”、“b”、“1”和“2”的混杂。然而程序很快就陷入死锁:

$python mwe.py
a0a0a0a0a0a0b0b0a0a0b0b0b0b0b0b0b0b0b0b0a0a0a0a0a0a0a0a1a1a2a2a2a2a2b2b2a2
Run Code Online (Sandbox Code Playgroud)

我应该指出,将 MyProcess 更改为从 Thread 继承会产生一个工作示例。 …

python multithreading multiprocessing

5
推荐指数
1
解决办法
1344
查看次数