相关疑难解决方法(0)

矩阵向量差的有效元素级argmin

假设一个数组a.shape == (N, M)和一个向量v.shape == (N,)。我们的目标是计算argminabsv距离减去每一个元素a-也就是说,

out = np.zeros(N, M)
for i in range(N):
    for j in range(M):
        out[i, j] = np.argmin(np.abs(a[i, j] - v))
Run Code Online (Sandbox Code Playgroud)

我有一个通过的矢量化实现np.matlib.repmat,它要快得多,但需要O(M*N^2)内存,在实践中是不可接受的。计算仍然在 CPU 上完成,所以最好的办法似乎是在 C 中实现 for 循环作为扩展,但也许 Numpy 已经实现了这个逻辑。

可以?任何可以有效实现上述功能的 Numpy 函数?

python performance for-loop numpy python-3.x

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

如何清除 numba 中的缓存(或强制重新编译)

我有一个用 numba 编写的相当大的代码库,我注意到当为另一个文件中调用另一个 numba 编译函数的函数启用缓存时,当被调用函数发生更改时,不会拾取被调用函数中的更改。当我有两个文件时会发生这种情况:

测试文件2:

import numba

@numba.njit(cache=True)
def function1(x):
    return x * 10
Run Code Online (Sandbox Code Playgroud)

测试文件:

import numba
from tests import file1

@numba.njit(cache=True)
def function2(x, y):
    return y + file1.function1(x)
Run Code Online (Sandbox Code Playgroud)

如果在 jupyter notebook 中,我运行以下命令:

# INSIDE JUPYTER NOTEBOOK
import sys
sys.path.insert(1, "path/to/files/")
from tests import testfile

testfile.function2(3, 4)
>>> 34   # good value
Run Code Online (Sandbox Code Playgroud)

但是,如果我更改然后将 testfile2 更改为以下内容:

import numba

@numba.njit(cache=True)
def function1(x):
    return x * 1
Run Code Online (Sandbox Code Playgroud)

然后我重新启动 jupyter notebook 内核并重新运行 notebook,我得到以下信息

import sys
sys.path.insert(1, "path/to/files/")
from tests import testfile

testfile.function2(3, 4) …
Run Code Online (Sandbox Code Playgroud)

anaconda numba

4
推荐指数
2
解决办法
2753
查看次数

标签 统计

anaconda ×1

for-loop ×1

numba ×1

numpy ×1

performance ×1

python ×1

python-3.x ×1