我想将一个小数组复制到特定长度的数组
示例:
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.])
那么,如何解决错误?还有其他选择吗?
答案 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()