【问题标题】:How to replicate array to specific length array如何将数组复制到特定长度的数组
【发布时间】:2017-12-21 00:30:39
【问题描述】:

我想将一个小数组复制到特定长度的数组

例子:

var = [22,33,44,55] # ==> len(var) = 4
n = 13

我想要的新数组是:

var_new = [22,33,44,55,22,33,44,55,22,33,44,55,22]

这是我的代码:

import numpy as np
var = [22,33,44,55]
di = np.arange(13)
var_new = np.empty(13)
var_new[di] = var

我收到错误消息:

DeprecationWarning:赋值将来会引发错误,很可能是因为您的索引结果形状与值数组形状不匹配。您可以使用arr.flat[index] = values 来保留旧行为。

但是我得到了我对应的变量:

var_new
array([ 22.,  33.,  44.,  55.,  22.,  33.,  44.,  55.,  22.,  33.,  44.,
    55.,  22.])

那么,如何解决这个错误呢?有其他选择吗?

【问题讨论】:

    标签: python python-3.x numpy replication


    【解决方案1】:

    有更好的方法来复制数组,例如你可以简单地使用np.resize

    返回具有指定形状的新数组。

    如果新数组大于原始数组,则新数组将填充a 的重复副本。 [...]

    >>> import numpy as np
    >>> var = [22,33,44,55]
    >>> n = 13
    >>> np.resize(var, n)
    array([22, 33, 44, 55, 22, 33, 44, 55, 22, 33, 44, 55, 22])
    

    【讨论】:

    • 这很不寻常,一个实际匹配np.resize的请求!
    【解决方案2】:

    首先,如果var_new[di] 的尺寸与var 不匹配,则不会出现错误,而是警告var_new[di] = var 将被弃用。

    其次,错误信息告诉我们该怎么做:使用

    var_new[di].flat = var
    

    并且您不会再收到警告,并且保证会正常工作。


    如果不需要numpy,另一种简单的方法是使用itertools

    >>> import itertools as it
    >>> var = [22, 33, 44, 55]
    >>> list(@987654322@(@987654323@(var), 13))
    [22, 33, 44, 55, 22, 33, 44, 55, 22, 33, 44, 55, 22]
    

    【讨论】:

      【解决方案3】:

      使用 [:] 复制数组(在 python 中称为列表),因为它们是可变的。然后python快捷方式只是将副本相乘并再添加一个 元素。

      >>> var = [22, 33, 44, 55]
      >>> n = 3
      >>> newlist = var[:]*n + var[:1]
      

      给出你想要的 13 个元素。

      【讨论】:

        【解决方案4】:
        var = [22,33,44,55]
        n = 13
        

        使用itertoolscycle()islice() 函数可以在没有numpy 的情况下重复列表(或任何其他可迭代)

        from itertools import cycle, islice
        var_new = list(islice(cycle(var),0,n)
        

        【讨论】:

        • 这列出了 13 个列表
        猜你喜欢
        • 2018-11-09
        • 1970-01-01
        • 2012-03-28
        • 1970-01-01
        • 1970-01-01
        • 2017-10-18
        • 1970-01-01
        • 2019-11-16
        • 1970-01-01
        相关资源
        最近更新 更多