如何将数组复制到特定长度的数组

时间:2017-07-16 11:03:11

标签: python python-3.x numpy replication

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

示例:

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

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

4 个答案:

答案 0 :(得分:4)

有更好的方法来复制数组,例如,您只需使用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])

答案 1 :(得分:1)

首先,如果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(it.islice(it.cycle(var), 13))
[22, 33, 44, 55, 22, 33, 44, 55, 22, 33, 44, 55, 22]

答案 2 :(得分:1)

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

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

给出你想要的13个元素。

答案 3 :(得分:0)

var = [22,33,44,55]
n = 13

使用numpy的{​​{1}}和itertools函数

,可以在没有cycle()的情况下重复列表(或任何其他可迭代)
islice()