将 numpy.stack() 与 numba njit 一起使用时出现打字错误

2023-12-26

最初的问题与使用有关np.linspace使用数组作为开始和停止参数,尽管现在我遇到了我想出的解决方法的问题。

采取以下措施:

from numba import njit
import numpy as np

@njit
def f1():
  start = np.array([0.1, 1.0], np.float32)
  stop = np.array([1.0, 10.0], np.float32)
  return np.linspace(start, stop, 10)

f1()

这会引发错误,因为尽管记录为支持“仅 3 参数形式” https://numba.readthedocs.io/en/stable/reference/numpysupported.html of linspace,它们实际上的意思是“具有开始和停止标量值的 3 参数形式”。

所以我想出了以下解决方法:

import numpy as np
from numba import njit

@njit
def f2():
  start = np.array([0.1, 1.0], np.float32)
  stop = np.array([1.0, 10.0], np.float32)
  pts_0 = np.linspace(start[0], stop[0], 10).astype(np.float32) # works
  pts_1 = np.linspace(start[1], stop[1], 10).astype(np.float32) # works
  return np.stack([pts_0, pts_1]).T                             # error

这会引发此错误:

---------------------------------------------------------------------------
TypingError                               Traceback (most recent call last)
c:\Users\X\Desktop\X\data_analysis.ipynb Cell 46' in <cell line: 18>()
     15   pts_1 = np.linspace(start[1], stop[1], 10).astype(np.float32)
     16   return np.stack([pts_0, pts_1]).T
---> 18 r = f2()

File c:\Users\X\miniconda3\envs\X\lib\site-packages\numba\core\dispatcher.py:468, in _DispatcherBase._compile_for_args(self, *args, **kws)
    464         msg = (f"{str(e).rstrip()} \n\nThis error may have been caused "
    465                f"by the following argument(s):\n{args_str}\n")
    466         e.patch_message(msg)
--> 468     error_rewrite(e, 'typing')
    469 except errors.UnsupportedError as e:
    470     # Something unsupported is present in the user code, add help info
    471     error_rewrite(e, 'unsupported_error')

File c:\Users\X\miniconda3\envs\X\lib\site-packages\numba\core\dispatcher.py:409, in _DispatcherBase._compile_for_args.<locals>.error_rewrite(e, issue_type)
    407     raise e
    408 else:
--> 409     raise e.with_traceback(None)

TypingError: Failed in nopython mode pipeline (step: nopython frontend)
No implementation of function Function(<function stack at 0x00000186F280CAF0>) found for signature:
 
 >>> stack(list(array(float32, 1d, C))<iv=None>)

再次,根据文档 https://numba.readthedocs.io/en/stable/reference/numpysupported.html, np.stack支持(对此也没有任何评论)。

我缺少什么?


np.stack受支持,但它期望一个元组而不是到目前为止的列表。这是一个固定代码:

@njit
def f2():
  start = np.array([0.1, 1.0], np.float32)
  stop = np.array([1.0, 10.0], np.float32)
  pts_0 = np.linspace(start[0], stop[0], 10).astype(np.float32) # works
  pts_1 = np.linspace(start[1], stop[1], 10).astype(np.float32) # works
  return np.stack((pts_0, pts_1)).T                             # works

顺便说一句,请注意np.stack((pts_0, pts_1)).T效率不是很高,因为它创建了临时数组和不连续的视图。由于使用 Numba 的目的是加快代码速度,因此请考虑使用此处应该更快的基本循环。同样的事情也适用于astype(np.float32):循环可以就地转换值。内存和分配非常昂贵,这通常是导致 Numpy 变慢的原因(也是缺乏特定用途的函数)。这样的事情将来会更慢(有关更多信息,请考虑阅读更多有关“记忆墙”)所以需要避免它们。

这是一个带有基本循环的明显更快的版本:

@njit
def f2():
    start1, start2 = np.float32(0.1), np.float32(1.0)
    stop1, stop2 = np.float32(1.0), np.float32(10.0)
    steps = 10
    delta = np.float32(1 / (steps - 1))
    res = np.empty((steps, 2), dtype=np.float32)
    for i in range(steps):
        res[i, 0] = start1 + (stop1 - start1) * (delta * i)
        res[i, 1] = start2 + (stop2 - start2) * (delta * i)
    return res

请注意,由于 32 位 FP 舍入,结果可能略有不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 numpy.stack() 与 numba njit 一起使用时出现打字错误 的相关文章

随机推荐

  • 将字符串作为条件求值 Java

    我必须从 D B 检索一组列值并将其作为条件进行检查 例如 我会有像这样的字符串 value gt 2 4 lt value lt 6 在 D B 列中 值是一直被比较的值 我将在代码中声明一个变量值 并且我应该评估这个条件 int val
  • GoLand 的运行/调试配置窗口中“Go 工具参数”的“-i”选项是什么?

    What is the i option for Go tool arguments in GoLand s Run Debug Configurations window 取自go help build The i flag instal
  • 关闭弹出窗口时刷新父页面

    我有一个父页面 我在其中添加了搜索功能 像下面这样 function FunClick StrPriCaption var StrPriHTML if StrPriCaption AdvSearch document getElementB
  • 画布工具提示出现在画布之外?

    我使用 KineticJS 和 D3 js 制作了以下内容 我使用 KineticJS 让我在用户将鼠标悬停在其中一个点上时弹出工具提示 但是 由于画布的边界 工具提示看起来被切断 有什么办法可以让它出现而不被剪掉吗 整个代码本身非常庞大
  • Azure SQL - 用户登录失败

    我正在使用免费的 azure 订阅 设置了 SQL 服务器 v12 并在其上创建了数据库 但是 我似乎无法使用在 SQL Server 凭据期间出现提示时设置的服务器管理凭据登录 管理工作室回报 Cannot connect to
  • 本地文件的 NSURLThumbnailDictionaryKey 为空

    我想获取必须在我的应用程序中显示的文件的缩略图 我在这里使用 NSURL NSDictionary thumbnails nil BOOL success fileURL getResourceValue thumbnails forKey
  • 套接字输入和输出的单独线程

    我被分配去解决多线程 java 服务器的一些性能和随机崩溃问题 尽管线程和线程安全对我来说并不是真正的新主题 但我发现设计一个新的多线程应用程序可能比尝试调整一些遗留代码困难一半 我浏览了一些著名的书籍来寻找答案 但奇怪的是 只要我阅读并分
  • 具有多维数组的 tf.SequenceExample

    在 Tensorflow 中 我想将多维数组保存到 TFRecord 例如 1 2 3 1 2 3 2 1 由于我试图解决的任务是连续的 因此我尝试使用 Tensorflowtf train SequenceExample 当写入数据时 我
  • 如何在 Jetpack Compose 中禁用和启用 LazyColumn/LazyRow 中的滚动?

    我想以编程方式动态启用和禁用滚动LazyColumn 好像没有相关功能LazyListState或相关参数LazyColumn本身 我怎样才能在 Compose 中实现这一目标 Since 1 2 0 userScrollEnabled范围
  • 如何从 QVBoxLayout 中删除(子)布局项?

    我找到了很多关于从 QVBoxLayout 中删除小部件的答案 但我没有找到任何有关删除布局的答案 我知道我可以将我的子布局放入 QWidget 中 我只是想了解更多 layout QtGui QVBoxLayout item in lay
  • 使用 OpenCV 读取 mp4 (Go Pro) 视频

    在 Visual Studio 2013 中使用带有 C 接口的 OpenCV 时 我在读取某些视频文件时遇到困难 我已经能够读取其他视频格式 因此相信我的代码没问题 问题视频文件是使用 Go Pro 拍摄的 格式为 mp4 我可以在使用
  • 为什么我的表单无法在 Internet Explorer 9 中上传文件?

    欢迎收看第 32 342 343 集 为什么 Internet Explorer 这么糟糕 我看到很多报道称 IE9 在上传文件方面表现不佳 显然 它有很多关于何时有效或无效的警告 如果有人有明确的列表 我很乐意看到它 然而 我发现的大多数
  • Mixpanel 人物个人资料头像图片

    我已经在互联网上搜索了此问题的解决方案 但无济于事 是否可以将我们用户的个人资料图片设置为 Mixpanel 人员报告中的个人资料图片 我尝试在声明 Mixpanel 用户属性的方法中调用我们的用户图片对象 但它没有更新照片 这里有最佳实践
  • Mean.js req.isAuthenticated 显示失败?

    我已经下载了meanjs 电子邮件受保护 cdn cgi l email protection我使用了两台服务器作为前端 我使用了 Angular 和 ionic 它在 localhost 3000 中运行 对于后端 我使用了meanjs
  • 从数组循环渲染组件

    在我的 app component ts 中 我有一个包含组件标签的数组 compData app component one app component two app component three 然后在我的 app componen
  • 链接:致命错误 LNK1104:无法打开文件“D:\...\MyProj.exe”

    使用 Visual Studio 2010 当我在短时间内构建 运行我的应用程序时 经常会收到以下错误 如果我等一两分钟再试一次就可以了 Unlocker http www emptyloop com unlocker 声称没有句柄锁定可执
  • 如何检查nodejs中的标头?

    这是运行良好的实际代码 但我想检查我的标头是否很好地传输到我的 api var request require request var express require express var router express Router GE
  • 多人网络游戏中的同步?

    最近我一直在开发一个多人网络应用程序 我已经使用 Bonjour 服务和 NSStream 对象成功实现了客户端服务器模型 双向通信已成功完成 我面临的问题是 运行该应用程序的两个设备通过本地 wifi 连接 从客户端向服务器发送消息时存在
  • 如何从 DynamoDB 获取每个主分区键的最新数据?

    我在 dynamodb 中有一张表 它存储帐户统计信息 帐户统计数据可能每天会更新多次 所以表记录可能如下所示 account id record id views stars 3 2019 03 16 1 29 3 2 2019 03 1
  • 将 numpy.stack() 与 numba njit 一起使用时出现打字错误

    最初的问题与使用有关np linspace使用数组作为开始和停止参数 尽管现在我遇到了我想出的解决方法的问题 采取以下措施 from numba import njit import numpy as np njit def f1 star