移动 numpy 数组中的元素

2023-11-23

这个问题在底部包含它自己的答案。使用预先分配的数组。

后续行动来自这个问题几年前,numpy 中有一个规范的“shift”函数吗?我没有看到任何东西文档.

这是我正在寻找的简单版本:

def shift(xs, n):
    if n >= 0:
        return np.r_[np.full(n, np.nan), xs[:-n]]
    else:
        return np.r_[xs[-n:], np.full(-n, np.nan)]

使用它就像:

In [76]: xs
Out[76]: array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])

In [77]: shift(xs, 3)
Out[77]: array([ nan,  nan,  nan,   0.,   1.,   2.,   3.,   4.,   5.,   6.])

In [78]: shift(xs, -3)
Out[78]: array([  3.,   4.,   5.,   6.,   7.,   8.,   9.,  nan,  nan,  nan])

This question came from my attempt to write a fast rolling_product yesterday. I needed a way to "shift" a cumulative product and all I could think of was to replicate the logic in np.roll().


So np.concatenate()np.r_[]。这个版本的函数性能更好了:

def shift(xs, n):
    if n >= 0:
        return np.concatenate((np.full(n, np.nan), xs[:-n]))
    else:
        return np.concatenate((xs[-n:], np.full(-n, np.nan)))

更快的版本只需预先分配数组:

def shift(xs, n):
    e = np.empty_like(xs)
    if n >= 0:
        e[:n] = np.nan
        e[n:] = xs[:-n]
    else:
        e[n:] = np.nan
        e[:n] = xs[-n:]
    return e

上述建议就是答案。使用预先分配的数组。


不是 numpy,而是 scipy 提供了您想要的转换功能,

import numpy as np
from scipy.ndimage import shift

xs = np.array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])

shift(xs, 3, cval=np.NaN)

其中默认值是从数组外部引入一个常量值 valuecval,此处设置为nan。这给出了所需的输出,

array([ nan, nan, nan, 0., 1., 2., 3., 4., 5., 6.])

负移的作用类似,

shift(xs, -3, cval=np.NaN)

提供输出

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

移动 numpy 数组中的元素 的相关文章

随机推荐

  • 如何在 GitHub 中的存储库上设置 receive.denyNonFastForwards

    我在 GitHub 上托管了一个存储库 其中有多个分支 如何设置主存储库的配置来设置receive denyNonFastForwards标志 以便主存储库只能接受快进的推送 并且拒绝任何非快进的推送 即使它们是快进的 forced Git
  • C# 登录示例

    我无法隐藏登录表单的主表单 用户登录后关闭登录表单并显示主表单 我一直让自己很困惑 我已经删除了所有代码并重新开始 我可以很好地隐藏登录表单 我无法隐藏调用的主窗体 Application Run new MainForm 登录表单如下所示
  • 处理大量行时,TMemo 速度慢得令人痛苦

    我的 TMemo 中有 100000 行 我想做类似的事情 for i 0 to Memo Lines Count 1 do Memo Lines i SomeTrim Memo Lines i 但速度是每秒0 5行 添加 BeginUpd
  • 如何从 iOS 上的硬件键盘检测按键向上/按键按下事件?

    虽然 SO 上发布了许多关于黑客键盘工作的方法 例如 iOS 7下蓝牙键盘如何支持上下方向键 or 接收iPhone键盘事件 它们都没有记录 是否可以使用公共 API 在 iOS 中检测来自硬件键盘 例如蓝牙 的 keyUp keyDown
  • Solr 中的查询超时

    我通过自定义开发的层对 solr 进行查询 并且在我的层中超时的少数查询仍在 solr 实例中 solr 中是否有一个参数可用于使特定查询超时 如中所述客户端断开连接后 Solr 查询继续吗 and 写在 Solr 常见问题解答中 在内部
  • Google BigQuery 的 Google App Engine 授权

    我已按照中的说明进行操作https developers google com bigquery authorization service accounts appengine从 App Engine 到 bigquery 进行一些查询
  • 带指针的结构体的 const 正确性

    我有一个包含一些指针的结构 我希望这些值是不可修改的 但简单地在前面写 const 并不会使结构成员不可变 typedef struct int x int y point void get const point p int x int
  • 有没有一种编程方法可以检查 Linux 上当前的 rpath?

    我知道可以使用readelf d
  • javafx 多个按钮到同一个处理程序

    我尝试制作一个简单的计算器 有 20 个按钮和一个处理程序 在java中 我可以在ActionPerformed中使用 if 语句和event getSource 来检查按下了哪个按钮 但它不适用于javafx中的处理程序 javafx 中
  • Ember.js 嵌套文件夹,如路由(包含斜杠)

    我正在使用 Ember js 构建一个具有文件管理器功能的应用程序 我想要嵌套文件夹的 URL 形式为 文件 嵌套 内部 它工作得很好linkTo 但是 如果我刷新 或直接转到 URL 则会收到错误消息 没有路由与 URL files Ne
  • 如何在 java 8 中迭代 JSONArray

    我有以下代码 它使用for loop迭代 a 中的元素JSONArray import org apache log4j Logger import org json JSONArray import org json JSONObject
  • Eclipse 调试器是否支持保存/恢复或检查点/倒回?

    我的意思如下 通过一个例子来说明 我启动我的 Java 应用程序 它恰好是一个模拟器 该应用程序运行了 1 小时并失败 我想在调试模式下重新启动我的应用程序 将其运行到第 59 分钟 然后开始单步执行代码 在任何时候 我都想回到第 59 分
  • 我的 php 网站被作为图像上传的代码攻击了..?

    昨天我的网站被收录了 攻击者将index php 文件更改为他们自己的 包含他们所有的荣耀消息和问候语 我已将此情况通知托管公司 我们在专用服务器上运行 就我而言 我正在尝试修复任何似乎是原因的问题 因为我仍然无法指出我们的问题到底是如何发
  • 将 HTML 编码从 UTF-8 切换到 UTF-16 时可能会出现什么问题?

    对于 HTML 编码从 UTF 8 更改为 UTF 16 有何影响 我想知道您对这个问题的想法 在做出这样的改变之前我需要考虑一些事情吗 注意 由于我需要处理大量的日文和中文文本 所以很感兴趣 我能想到一些会出错的事情 您必须在 HTTP
  • Proguard:避免与预混淆的库 JAR 发生命名冲突

    看来 Proguard 在重命名 重新打包类时并没有尝试避免与库 JAR 中的类发生命名冲突 这是正确的 还是我配置不正确 我正在混淆使用最新 Google AdMob SDK 的 Android 应用程序 之前我使用旧的 AdMob SD
  • 如何通过 Apache Camel 调用 RESTful 服务?

    我目前正在使用 HTTP 方法来调用某些 URL 这将产生 JIRA 问题 现在我想使用 Apache Camel 我该如何使用它 我需要通过Camel调用以下链接 http localhost 8080 rest api 2 projec
  • 如何在 POSIX sh 中获取脚本目录?

    我的 bash 脚本中有以下代码 现在我想在 POSIX sh 中使用它 我该如何转换它 DIR cd dirname BASH SOURCE 0 gt dev null pwd The POSIX shell sh counterpart
  • 在react/redux应用程序中隐藏api url(代理)

    我担心我的 React Redux 应用程序的安全性 因为我的 api url 在捆绑的 app js 文件中向公众公开 我一直在研究这个 一些开发人员以某种方式代理它 即我可以使用而不是使用我的 api urlapi 每当我与类似的库进行
  • 如何查找加载到进程中的DLL及其位置等

    我使用过 Process Explorer 但我忘记了另一个实用程序 它可以让您查看进程从何处加载 图像文件 以及内存中的 dll 以及它们从何处加载 Process Explorer 对我来说仅适用于托管程序集 还有什么是原生的吗 Pro
  • 移动 numpy 数组中的元素

    这个问题在底部包含它自己的答案 使用预先分配的数组 后续行动来自这个问题几年前 numpy 中有一个规范的 shift 函数吗 我没有看到任何东西文档 这是我正在寻找的简单版本 def shift xs n if n gt 0 return