小编Lab*_*abo的帖子

PyTorch和Torch之间有什么关系?

有两个PyTorch存储库:

第一个显然需要Torch和lua并且是一个包装器,但第二个没有引用Torch项目,除了它的名字.

它与Lua Torch(http://torch.ch/)有什么关系?

torch pytorch

27
推荐指数
3
解决办法
2万
查看次数

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

bytearray 和替代品的性能

我正在为通过 TCP 工作的协议编写解析器。

有些消息在多个数据包之间拆分,因此我需要能够“窥视”到我的流中,并有可能返回并在最后附加传入数据。另一方面,我希望能够丢弃我成功解析的数据包的内容。

  • 问题bytes在于追加需要复制(不是在 CPython 中,但在不可变对象中删除第一个字节也是不可能的)。
  • 问题bytearray是刷新已经看到的字节也需要复制(或者我认为,见下文)
  • 问题collections.deque在于巨大的内存需求。与list.

但是,我做了一些测试,bytearray似乎 pop(0) 操作比列表高效得多:

from time import time

n = 100000

for container in [bytearray, list]:
    print(container)

    a = container(b'a'*n)
    t = time()
    for i in range(n):
        del a[0]
    print('del a[0]', time() - t)

    a = container(b'a'*n)
    t = time()
    for i in range(n):
        del a[-1]
    print('del a[-1]', time() - t)

    a = container(b'a'*n)
    t = time()
    for i in range(n-1):
        del …
Run Code Online (Sandbox Code Playgroud)

python arrays data-structures

8
推荐指数
1
解决办法
3859
查看次数

如何在 VS Code 中的当前文件上运行脚本?

在 TextMate 中,您可以对文件或选择运行 shell 脚本,然后用输出替换选择或在后面插入输出。

如何在 VS Code 中轻松做到这一点?

很容易,我希望能够使用键盘快捷键启动一些脚本,根据语言的不同,相同的快捷键与不同的命令相关联。例如,将所有 linter 放在同一个快捷方式下(这只是一个例子,我知道你可以让它们在保存时运行)。

我认为可以对现有文件执行此操作(某些扩展可以执行此操作),但是未保存的缓冲区又如何呢?

visual-studio-code

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

将sympy lambda传递给multiprocessing.Pool.map

我想并行执行一个sympy lambda函数.我不知道:

  • 为什么它并行工作,虽然它是一个lambda函数
  • 当我尝试在没有池的情况下执行时它停止工作的原因
  • 如果我取消注释第一次返回,它为什么会起作用 lambdify

显然降价预处理器需要在代码上方的一行文本,所以这是代码:

from multiprocessing import Pool

import sympy
from sympy.abc import x

def f(m):
    return m.lambdify()(1)

class Mult():
    def lambdify(self):
        # return sympy.lambdify(x, 2*x, 'numpy')
        self._lambdify = sympy.lambdify(x, 2 * x, 'numpy')
        return self._lambdify

if __name__ == '__main__':
    with Pool() as pool:
        m = Mult()
        print(pool.map(f, [m]))
        print(pool.map(f, [m]))
        print(f(m))
        print(pool.map(f, [m]))
Run Code Online (Sandbox Code Playgroud)

它打印:

[2]
[2]
2
PicklingError: Can't pickle <function <lambda> at 0x000000000DF0D048>: attribute lookup <lambda> on numpy failed
Run Code Online (Sandbox Code Playgroud)

(我削减了追溯)

如果我取消注释,它会正常工作:

[2]
[2]
2
[2] …
Run Code Online (Sandbox Code Playgroud)

python sympy multiprocessing

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

numba没有并行化范围

我的代码中有循环,我想并行化

from numba import njit, prange
from time import time


@njit
def f1(n):
    s = 0
    for i in range(n):
        for j in range(n):
            for k in range(n):
                s += (i * k < j * j) - (i * k > j * j)
    return s


@njit
def f2(n):
    s = 0
    for i in prange(n):
        for j in prange(n):
            for k in prange(n):
                s += (i * k < j * j) - (i * k > j …
Run Code Online (Sandbox Code Playgroud)

python jit numba

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

numpy 一维数组可以不连续吗?

是否可以在 numpy 中创建一个不是 C_CONTIGUOUS 或 F_CONTIGUOUS 的一维数组?

我认为连续的概念只对具有更多维度的数组有意义,但我在文档中找不到任何内容。

我尝试了以下方法来制作不连续的一维数组:

>>> np.empty(10).flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
>>> np.empty(10).copy('F').flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : True
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
Run Code Online (Sandbox Code Playgroud)

python arrays numpy memory-layout

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

如何在CPython中优化字符串排序?

我有这个代码是故意不符合要求的:

def suffix_array_alternative_naive(s):
    return [rank for suffix, rank in sorted((s[i:], i) for i in range(len(s)))]

from random import randint

constant_string = lambda length: 'a' * length
random_string = lambda length: ''.join(chr(randint(0, 255)) for _ in range(length))

length = 10000
s1 = constant_string(length)
s2 = random_string(length)

from time import time

for s in [s1, s2]:
    d = time()
    for _ in range(10):
        suffix_array_alternative_naive(s)
    print(time()-d)
Run Code Online (Sandbox Code Playgroud)
  • 使用pypy3: 2.0367980003356934 1.9366297721862793
  • 使用python3: 0.48073387145996094 0.5416769981384277 如果我尝试使用length = 100000和一个循环:

  • pypy3: 48.4867467880249 35.002175092697144

  • Python3 4.402702808380127 4.469300031661987

通常,常量字符串应该更长,以便在它们之间进行比较,因为你必须完全读取它们,而随机字符串应该很容易避免后缀前缀之间的冲突.因此,pypy3的结果是合乎逻辑的.

为什么它不像CPython那样工作?

python cpython

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

使用队列和多处理时出现死锁

我不明白多处理文档(python.org)的这一部分,我引述:

"将陷入僵局的一个例子如下:

from multiprocessing import Process, Queue

def f(q):
    q.put('X' * 1000000)

if __name__ == '__main__':
    queue = Queue()
    p = Process(target=f, args=(queue,))
    p.start()
    p.join()                    # this deadlocks
    obj = queue.get()
Run Code Online (Sandbox Code Playgroud)

"首先,它为什么会阻塞?更令人惊讶的是,当我在f的定义中使用一些小于1000000的值时,它可以正常工作(它适用于10,100,1000,10000,但不能使用100000).

非常感谢你的帮助 !

python multithreading multiprocessing python-multithreading python-multiprocessing

-2
推荐指数
1
解决办法
448
查看次数