当前位置: 首页 > 面试题库 >

在numpy数组中移动元素

尤茂材
2023-03-14
问题内容

几年前从这个问题开始,在numpy中是否有规范的“移位”功能?我从文档中看不到任何东西。

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

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])

这个问题来自于我昨天尝试[编写快速滚动产品的](http://codingdict.com/questions/163825尝试。我需要一种“转移”累积乘积的方法,我所能想到的就是在中复制逻辑np.roll()

因此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.interpolation import shift

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

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

默认情况是从数组外部引入一个带有值的常量值cval,此处设置为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])


 类似资料:
  • 问题内容: 我有一个像这样的numpy数组: 并想创建一个数组,其中索引0中的值在索引1中,索引1在索引2中,依此类推。 我想要的输出是: 我猜想有一个简单的方法可以做到这一点,而无需遍历整个数组。我如何以numPythonic的方式做到这一点? 问题答案: 您可以使用 要么

  • 问题内容: 这是这里提出的问题的扩展(在下面引用) 我有一个矩阵(准确地说是2d numpy ndarray): 我想根据另一个数组中的滚动值独立滚动A的每一行: 也就是说,我要这样做: 有办法有效地做到这一点吗?也许使用花哨的索引技巧? 可接受的解决方案是: 我基本上想做同样的事情,除了当索引被滚动“粘贴”到行的末尾时,我希望用NaN填充行的另一侧,而不是将值移到“前”定期排成一行。 也许以某种

  • 问题内容: 给定n个元素的数组,即 我可以编写一个扩展,以便可以修改数组以实现以下输出: 有没有一种方法可以实现将数组移动任何索引(正数或负数)的功能。我可以使用子句以命令式方式实现此功能,但我正在寻找的是功能性实现。 该算法很简单: 通过提供的索引将数组分为两个 将第一个数组附加到第二个数组的末尾 有什么方法可以以功能样式实现它吗? 我完成的代码: 问题答案: 您可以使用远程下标并连接结果。这将

  • 问题内容: 在Python中,我们可以使用来获取数组中值的索引。 但是,当我尝试执行NumPy数组时: 我得到: AttributeError:“ numpy.ndarray”对象没有属性“ index” 我如何在NumPy数组上执行此操作? 问题答案: 使用来获得,其中一个给定的条件是指数。 例子: 对于称为的2D : 对于一维数组: 请注意,这也适用于像条件,,等等… 您也可以使用方法创建的子

  • 问题内容: 我在2D数组上恒定大小的移动窗口上执行操作。我可以实现高效的类似于矢量化的操作来执行此操作而无需在Python中循环吗?我目前的结构看起来像这样 这些评论可以 吃 留在这个问题暗指矢量化这种操作这种可能性,但没有进一步的细节矢量索引/切片在numpy的/SciPy的? 问题答案: 如果可以表达功能 作为一个线性算,你可以使用SciPy的的signal.convolve2d函数来做到这一