说我有一个经度数组,lonPorts
lonPort =np.loadtxt('LongPorts.txt',delimiter=',')
例如:
lonPort=[0,1,2,3,...]
我想重复每个元素不同的次数。我该怎么做呢?这就是我试过的:
Repeat =[5, 3, 2, 3,...]
lonPort1=[]
for i in range (0,len(lenDates)):
lonPort1[sum(Repeat[0:i])]=np.tile(lonPort[i],Repeat[i])
结果将是:
lonPort1=[0,0,0,0,0,1,1,1,2,2,3,3,3,...]
我得到的错误是:
list assignment index out of range
如何摆脱错误并制作我的阵列? 谢谢!
答案 0 :(得分:3)
您可以使用np.repeat()
:
np.repeat(a, [5,3,2,3])
示例:
In [3]: a = np.array([0,1,2,3])
In [4]: np.repeat(a, [5,3,2,3])
Out[4]: array([0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 3])
答案 1 :(得分:1)
如果不依赖于numpy,您可以创建一个将逐个使用您的项目的生成器,并重复它们所需的时间。
x = [0, 1, 2, 3]
repeat = [4, 3, 2, 1]
def repeat_items(x, repeat):
for item, r in zip(x, repeat):
while r > 0:
yield item
r -= 1
for value in repeat_items(x, repeat):
print(value, end=' ')
显示0 0 0 0 1 1 1 2 2 3
。
答案 2 :(得分:1)
为可能想要使用列表的未来读者提供无懈可击的解决方案。
>>> lst = [0,1,2,3]
>>> repeat = [5, 3, 2, 3]
>>> [x for sub in ([x]*y for x,y in zip(lst, repeat)) for x in sub]
[0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 3]
如果lst
包含可变对象,请注意保留可变元素的序列的pitfalls序列乘法。