就地映射 NumPy 数组

2024-01-03

是否可以将 NumPy 数组映射到位?如果是,怎么办?

Given a_values- 2D 数组 - 这是目前对我有用的代码:

for row in range(len(a_values)):
    for col in range(len(a_values[0])):
        a_values[row][col] = dim(a_values[row][col])

但它太丑陋了,我怀疑 NumPy 中的某个地方一定有一个函数可以对类似的东西做同样的事情:

a_values.map_in_place(dim)

但如果存在类似上述的东西,我一直无法找到它。


只有在空间有限的情况下才值得尝试就地执行此操作。如果是这种情况,可以通过迭代数组的扁平视图来稍微加快代码速度。自从reshape返回一个新视图如果可能 http://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html,数据本身不会被复制(除非原始数据具有不寻常的结构)。

我不知道有什么更好的方法来实现任意 Python 函数的真正就地应用。

>>> def flat_for(a, f):
...     a = a.reshape(-1)
...     for i, v in enumerate(a):
...         a[i] = f(v)
... 
>>> a = numpy.arange(25).reshape(5, 5)
>>> flat_for(a, lambda x: x + 5)
>>> a

array([[ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24],
       [25, 26, 27, 28, 29]])

一些时间安排:

>>> a = numpy.arange(2500).reshape(50, 50)
>>> f = lambda x: x + 5
>>> %timeit flat_for(a, f)
1000 loops, best of 3: 1.86 ms per loop

它的速度大约是嵌套循环版本的两倍:

>>> a = numpy.arange(2500).reshape(50, 50)
>>> def nested_for(a, f):
...     for i in range(len(a)):
...         for j in range(len(a[0])):
...             a[i][j] = f(a[i][j])
... 
>>> %timeit nested_for(a, f)
100 loops, best of 3: 3.79 ms per loop

当然,矢量化仍然更快,所以如果您可以制作副本,请使用它:

>>> a = numpy.arange(2500).reshape(50, 50)
>>> g = numpy.vectorize(lambda x: x + 5)
>>> %timeit g(a)
1000 loops, best of 3: 584 us per loop

如果你可以重写dim使用内置的 ufunc,那么请不要vectorize:

>>> a = numpy.arange(2500).reshape(50, 50)
>>> %timeit a + 5
100000 loops, best of 3: 4.66 us per loop

numpy操作是否像+=正如您所期望的那样,您可以通过就地应用程序免费获得 ufunc 的速度。有时甚至更快!看here https://stackoverflow.com/a/10149508/577088举个例子。


顺便说一句,我对这个问题的原始答案(可以在其编辑历史记录中查看)是荒谬的,并且涉及将索引矢量化为a。它不仅需要做一些时髦的事情来绕过vectorize's 类型检测机制 http://docs.scipy.org/doc/numpy/reference/generated/numpy.vectorize.html#numpy.vectorize,结果证明它和嵌套循环版本一样慢。聪明就这么多了!

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

就地映射 NumPy 数组 的相关文章

  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 如何获得n个具有不同元素数量的数组的所有可能组合?

    我有一些在编程时未知的数组数量 也许是 3 或 4 或 7 每个数组都有一些元素 即 a 1 2 3 4 b 6 7 5 2 1 c 22 4 6 8 4 8 5 4 d e f g 我想通过从每个数组中采样一个数字来获得所有可能的组合 例
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 更改 URL 而不触发 DOM 更新

    如何在不触发 DOM 更新的情况下更改 ember 中的 URL IE之类的东西 window location hash items 20 然而 在没有触发 Embers 路由系统和由此产生的 DOM 变化的情况下 注意我目前正在使用 h
  • 如何向“主屏幕->菜单->添加->快捷方式”添加条目(指向“活动”)?

    我正在为 Android SDK 1 5 编写程序 我想知道如何在 主屏幕 gt 菜单 gt 添加 gt 快捷方式 或在 Hero 上 主屏幕 gt 菜单 gt 添加到主页 gt 快捷方式 中添加 注册我的程序活动之一 所以该用户将能够将其
  • 如何安全地从 URL 获取文件扩展名?

    考虑以下 URL http m3u com tunein m3u http asxsomeurl com listen asx 8024 http www plssomeotherurl com station pls id 111 htt
  • Moq 等于仅适用于 IEquatable

    我正在使用 Moq 框架进行单元测试 我遇到了这个有趣的问题 public interface Bar IEquatable
  • 为什么“虚拟”对于派生类中的重写方法是可选的?

    当一个方法被声明为virtual在类中 会自动考虑其在派生类中的重写virtual同样 C 语言使此关键字virtual在这种情况下可选 class Base virtual void f class Derived public Base
  • 自重启 MathKernel - 在 Mathematica 中可能吗?

    这个问题来自最近的一个问题 正确的封顶方法数学内存使用 https stackoverflow com questions 7854980 correct way to cap mathematica memory use 我想知道 是否可
  • C++11 中函数的“final”关键字的用途是什么?

    目的是什么finalC 11 中函数的关键字 我知道它可以防止派生类重写函数 但如果是这种情况 那么将您的函数声明为非虚拟还不够吗 final功能 我在这里还缺少其他东西吗 正如 idljarn 在评论中已经提到的那样 您缺少的是 如果您是
  • 扩展方法ConvertAll

    ConverAll 的正确用法是什么 它将一种类型转换为另一种类型吗 like List
  • 在 UIButton 内添加图像作为附件

    我有以下内容UIButton我想在最右边添加一个图像 就像一个accessoryView 我已经在使用 backgroundImage 并且我想避免将 2 个图像合并为 1 个 是否可以在 UIButton 中添加另一个图像Accesory
  • 增强同步

    我有 NUM THREADS 个线程 线程中包含以下代码 Calculate some value Critical section to accummulate all thresholds boost mutex scoped lock
  • 如何创建自定义 javadoc 标签?

    如何创建自定义 javadoc 标签 例如 pre post 我找到了一些解释它的链接 但我没有运气 以下是一些链接 http www developer com java other article php 3085991 Javadoc
  • 尝试通过 iPhone 模拟器播放声音

    我正在尝试从 iPhone 程序播放声音文件 这是代码 NSString path NSBundle mainBundle pathForResource play ofType caf NSFileHandle bodyf NSFileH
  • Bigquery python SchemaField() 与结构数组

    我正在尝试通过 python 客户端在 Bigquery 创建一个表 文档使用bigquery SchemaField name TYPE 定义一个字段 虽然它似乎不起作用ARRAYS or STRUCTS 这是我试图创建的 STRUCTS
  • data.table 根据组的滞后值删除行

    我有一个data table形式如下 DT lt data table tag rep c A B each 10 value c 0 3 3 3 0 1 1 1 3 0 0 1 3 1 0 3 0 1 1 0 gt DT tag valu
  • 连接 Apache Spark DataFrame 中的列

    我们如何连接 Apache Spark DataFrame 中的两列 Spark SQL中有没有我们可以使用的函数 通过原始 SQL 您可以使用CONCAT 在Python中 df sqlContext createDataFrame fo
  • 使用其他 gradle 文件中的 Gradle 函数

    我想将 300 行 build gradle 逻辑地拆分为多个构建文件 以使其更易于维护和扩展 正如我所注意到的 可以将 gradle 任务拆分为多个文件并将它们用于 apply from myGradleFile 遗憾的是 通过这种方法
  • 等待函数中的 Ajax 调用结束,然后将对象返回给外部变量

    我想按照预期使用 JavaScript 异步 我想将收到的数据 对象分配给我需要的尽可能多的变量 DataModel01 DataModel02 DataModel03 等 我的想法是 我对 API 数据的需求一直在变化 我只想定义一次从哪
  • 无需 IP 即可访问 R Shiny 应用程序

    我开发了一个 R Shiny 应用程序并托管在本地 Intranet 服务器上 我的同事可以使用 IP Port 来访问它 不像http 192 168 135 146 5050 http 192 168 135 146 5050 但是 如
  • django local_settings导入错误

    我想导入 local settings py 文件 不在我的 VCS 系统中 以覆盖 settings py 中的数据库设置 为此 我在 settings py 文件的最后添加了这些行 try from local settings imp
  • 就地映射 NumPy 数组

    是否可以将 NumPy 数组映射到位 如果是 怎么办 Given a values 2D 数组 这是目前对我有用的代码 for row in range len a values for col in range len a values