重复数组的不同元素不同的次数
Repeat different elements of an array different amounts of times
假设我有一个包含经度的数组,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
如何消除错误并制作数组?
谢谢!
您可以使用 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])
在不依赖 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
。
为可能想要使用列表的未来读者提供 numpy-free 解决方案。
>>> 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 序列乘法。
假设我有一个包含经度的数组,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
如何消除错误并制作数组? 谢谢!
您可以使用 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])
在不依赖 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
。
为可能想要使用列表的未来读者提供 numpy-free 解决方案。
>>> 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 序列乘法。