小编try*_*lve的帖子

如何处理将作为另一个包的依赖项的命名空间包

我已经编写了三个 Python 模块,其中两个是独立的,但最后一个将依赖于两个独立的模块。例如,考虑以下结构

myProject/
    subpackage_a/
        __init__.py
        ...
    subpackage_b/
        __init__.py
        ...
    mainpackage/
        __init__.py
        ...
Run Code Online (Sandbox Code Playgroud)

mainpackage取决于subpackage_aand subpackage_b,其中 assubpackage_asubpackage_b可以独立使用。换句话说,在 中mainpackage,有对subpackage_a和 的引用subpackage_b。简而言之,我希望用户能够from myProject import subpackage_asubpackage_a.subfunction(args)不调用mainpackage. 我还希望用户使用from myProject import mainpackage并开始使用mainpackage.mainfucntion(args),在那里mainpackage.mainfucntion将调用subpackages 中的函数。

我了解了命名空间打包。但是,我在涉及依赖项的命名空间包上找不到任何内容。如果有更好的解决方案,我不必使用命名空间打包。我能得到一些关于我应该寻找什么的建议吗?

python namespaces setuptools package

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

Julia - 嵌套循环消耗大量内存

我有一个嵌套的循环迭代方案,占用了大量的内存.我确实理解我不应该使用全局变量,但即使我将所有内容都包含在函数中,内存情况也没有改善.它只是在每次迭代后累积,就像没有垃圾收集一样.

这是一个可行的例子,类似于我的代码.

我有两个文件.首先,functions.jl:

##functions.jl
module functions

function getMatrix(A)
    L = rand(A,A);
    return L;
end

function loopOne(A, B)
    res = 0;
    for i = 1:B
        res = inv(getMatrix(A));
    end
    return(res);
end

end
Run Code Online (Sandbox Code Playgroud)

第二档main.jl:

##main.jl
include("functions.jl")
function main(C)
    res = 0;
    A = 50;
    B = 30;
    for i =1:C
        mat = functions.loopOne(A,B);
        res = mat .+ 1;
    end
    return res;
end
main(100)
Run Code Online (Sandbox Code Playgroud)

当我执行时julia main.jl,内存随着我的扩展C而增加main(C)(当我增加到C1000000 时,有时会增加到数百万个分配和10GiB ).

我知道这个例子看起来没用,但它类似于我的结构.有人可以帮忙吗?谢谢.

更新:

Michael …

memory memory-management julia

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

Julia - 为什么循环更快

我有 MATLAB 背景,所以我倾向于将所有内容矢量化。但是,在 Julia 中,我测试了这两个函数:

function testVec(n)
    t = [0 0 0 0];
    for i = 1:n
        for j = 1:4
            t[j] = i;
        end
    end
end

function testVec2(n)
    t = [0 0 0 0];
    for i = 1:n
        t.= [i i i i];
    end
end

@time testVec(10^4)
0.000029 seconds (6 allocations: 288 bytes)
@time testVec2(10^4)
0.000844 seconds (47.96 k allocations: 1.648 MiB)
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 为什么循环更快?
  2. 如果循环确实更快,是否有模拟循环的“智能”矢量化技术?循环的语法又丑又长。

performance julia

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

Python:无法复制内存使用情况的测试

我试图在这里复制内存使用测试.

从本质上讲,帖子声称给出了以下代码片段:

import copy
import memory_profiler

@profile
def function():
    x = list(range(1000000))  # allocate a big list
    y = copy.deepcopy(x)
    del x
    return y

if __name__ == "__main__":
    function()
Run Code Online (Sandbox Code Playgroud)

调用

python -m memory_profiler memory-profile-me.py
Run Code Online (Sandbox Code Playgroud)

在64位计算机上打印

Filename: memory-profile-me.py

Line #    Mem usage    Increment   Line Contents
================================================
 4                             @profile
 5      9.11 MB      0.00 MB   def function():
 6     40.05 MB     30.94 MB       x = list(range(1000000)) # allocate a big list
 7     89.73 MB     49.68 MB       y = copy.deepcopy(x)
 8     82.10 MB …
Run Code Online (Sandbox Code Playgroud)

python memory memory-management memory-profiling

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

如何防止lambda函数递归调用自身?

在我的代码中,我首先定义了两个lambda函数:

func1 = lambda x: x + 2
func2 = lambda x: x * 2
Run Code Online (Sandbox Code Playgroud)

后来在我的代码中,我想创建一个lambda函数,它添加上面两个lambda函数的结果,但是这个函数必须和上面的函数之一一样.也就是说,我想做这样的事情:

func2 = lambda x: func1(x) + func2(x)
Run Code Online (Sandbox Code Playgroud)

请注意,功能名称func2再次出现.

我知道这很愚蠢,还有其他方法可以达到同样的预期效果.然而,这个例子只是我试图实现的一个非常简化的版本.但是,这不起作用,因为它给我错误:

RecursionError:超出最大递归深度

我认为这是因为func2一直在呼唤自己.有没有办法防止这种情况发生?我无法更改名称func1func2(请注意,这也意味着我无法创建两个具有不同名称但内容相同的新功能).我试过这样的事

func2Copy = lambda x: func2(x)
func1Copy = lambda x: func1(x)
func2 = lambda x: func1Copy(x) + func2Copy(x)
Run Code Online (Sandbox Code Playgroud)

但看到了同样的错误(如预期的那样).我正在尝试做什么?

python lambda

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

升级到 Mojave 后 Pybind11 无法工作或 C++ 无法编译:-lstdc++ not found

在升级 MacOS 之前,我能够在此处安装 pybind11 示例。但是,在我将 MacOS 升级到 Mojave 后,当我在该链接上编译相同的示例时,我看到以下错误:

clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of OS X 10.9 [-Wdeprecated]
ld: library not found for -lstdc++
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command 'g++' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)

我缺少链接器命令吗?我在网上搜索过但找不到解决方案。

c++ pybind11 macos-mojave

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