【问题标题】:Numpy matrix functions with NumbaNumba 的 Numpy 矩阵函数
【发布时间】:2018-02-20 20:11:42
【问题描述】:

我是 Python 编程新手。 我有以下 Python 3.6 代码:

import numpy as np
from numba import jit
@jit(nopython=True)
def genarray(rows, cols):
    """return a new matrix"""
    return np.zeros([rows, cols], float)
L1 = 5
C1 = 5
B = genarray(L1, C1)
print(type(B))

编译时出现以下错误:

TypingError: >Invalid usage of Function(<built-in function zeros>) with parameters (list(int64), Function(<class 'float'>))

 * parameterized

我尝试了np.float, np.float64,但我得到了错误。代码在没有nopython=true 选项的情况下编译正常。

如何解决矩阵的错误?因为使用向量代码编译OK 带有nopython=true 选项。

【问题讨论】:

  • 如果你是 Python 新手(我假设是 numpy),你为什么要玩 numba?这是一个高级工具,旨在加速迭代numpy 计算。你能在没有numba 的情况下编写那个函数吗?是不是太慢了?

标签: python python-3.x numpy numba


【解决方案1】:

我担心此时担心 numba 可能不是最有效的方法。也就是说,您可以通过将元组而不是列表传递给np.zeros 并使用np.float64 来实现您的目标:

>>> @jit(nopython=True)
... def genarray(rows, cols):
...     """return a new matrix"""
...     return np.zeros((rows, cols), np.float64)
... 
>>> L1 = 5
>>> C1 = 5
>>> B = genarray(L1, C1)
>>> print(type(B))
<class 'numpy.ndarray'>
>>> B
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

如果这看起来很挑剔,那你是对的:但这是目前使用 numba 的权衡。

【讨论】:

    猜你喜欢
    • 2016-07-31
    • 2018-10-06
    • 2020-05-08
    • 1970-01-01
    • 2016-10-10
    • 2013-10-25
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多