python - 将 numpy.bmat 与 numba 一起使用
问题描述
我正在尝试在我的 numba 优化 python 程序中使用 np.bmat。为此,我必须手动定义一个 jitted 函数 bmat ,因为不支持来自 numpy 的本机函数:
@njit
def _bmat_2d(matrices):
arr_rows = []
for row in matrices:
arr_rows.append(np.concatenate(row, axis=-1))
return np.array(np.concatenate(arr_rows, axis=0))
(此代码或多或少是 numpy 的简化副本)
然而:
- numba 仅接受 np.concatenate [1] 输入中的元组
- numba 非常不擅长将任意列表转换为元组 [2]
你对此有什么想法吗?
参考:
解决方案
以下内容是否适合您的目的?
import numpy as np
import numba as nb
@nb.njit
def _bmat_2d(m):
out = np.hstack(m[0])
for row in m[1:]:
x = np.hstack(row)
out = np.vstack((out, x))
return out
A = np.random.randint(10, size=(3,2))
B = np.random.randint(10, size=(3,1))
C = np.random.randint(10, size=(3,3))
D = np.random.randint(10, size=(4,6))
a = np.bmat(((A, B, C), (D,)))
b = _bmat_2d(((A, B, C), (D,)))
print(np.allclose((a, b)) # True
请注意,您必须传入元组而不是列表列表,否则您将收到“反射列表”错误,因为当前版本中的 Numba 无法处理列表列表。
推荐阅读
- javascript - 如果不存在则创建新的,否则在firebase中更新
- database - 内存数据库是否使用用户的主内存?
- spring - Koin中的Spring Application Context相当于什么
- c - 在 C 项目中使用“伞形”标头有什么缺点?
- git - 是否有任何用于 github 注册/加入的 API?
- ruby-on-rails - 在 Rails 中使用另一个表的属性(一对多)进行过滤
- javascript - 如何在 `window` 中暴露 webpack 依赖项?
- jquery - JQuery - 如何在表内的每个 td 元素中触发用户选择:文本?
- abap - 具有多个内部表的 ABAP CURSOR FETCH
- reactjs - 在 React JS 中使用 SEO