首页 > 解决方案 > Python用从索引到另一个的值填充数组

问题描述

我有 3 个一维列表。

repetitions= [2, 1, 1, 3, 1, 1, 1, 1, 2, 1]
start = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
end = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110]

我想使用重复列表从start[i]end[i]填充 2D 输出 np.array 。

例如,假设我的输出数组的形状为 (150,10),其中填充了零。

Output = [
         [0,0,0,0,0,0,0,0,0,0] #0
         [0,0,0,0,0,0,0,0,0,0] #1
         [0,0,0,0,0,0,0,0,0,0] #2
         [0,0,0,0,0,0,0,0,0,0] #3
         [0,0,0,0,0,0,0,0,0,0] #4
         [0,0,0,0,0,0,0,0,0,0] #5
         [0,0,0,0,0,0,0,0,0,0] #6
         [0,0,0,0,0,0,0,0,0,0] #7
         [0,0,0,0,0,0,0,0,0,0] #8
         [0,0,0,0,0,0,0,0,0,0] #9
         [0,0,0,0,0,0,0,0,0,0] #10
         [0,0,0,0,0,0,0,0,0,0] #11
         [0,0,0,0,0,0,0,0,0,0] #12
         [0,0,0,0,0,0,0,0,0,0] #13
         [0,0,0,0,0,0,0,0,0,0] #14
         ...
         ]

首先,我必须迭代重复列表以获取迭代开始和结束列表的次数,并获取行和列索引以填充输出数组。

例如,重复列表的第一列(索引为 0的列)等于2 ,那么我将不得不迭代开始和结束列表2次并填充输出数组,首先,从行索引(start[0]= =10 ) 到行end[0]==20的列索引索引 0(这是重复列表中重复值 2 的索引),值为 1。

然后从索引 0处的start[1]end[2]也具有值 1。

第一次迭代的输出数组将是这样的:

Output = [
         [0,0,0,0,0,0,0,0,0,0] #0
         [0,0,0,0,0,0,0,0,0,0] #1
         [0,0,0,0,0,0,0,0,0,0] #2
         [0,0,0,0,0,0,0,0,0,0] #3
         [0,0,0,0,0,0,0,0,0,0] #4
         [0,0,0,0,0,0,0,0,0,0] #5
         [0,0,0,0,0,0,0,0,0,0] #6
         [0,0,0,0,0,0,0,0,0,0] #7
         [0,0,0,0,0,0,0,0,0,0] #8
         [0,0,0,0,0,0,0,0,0,0] #9
         [1,0,0,0,0,0,0,0,0,0] #10
         [1,0,0,0,0,0,0,0,0,0] #11
         [1,0,0,0,0,0,0,0,0,0] #12
         [1,0,0,0,0,0,0,0,0,0] #13
         [1,0,0,0,0,0,0,0,0,0] #14
         [1,0,0,0,0,0,0,0,0,0] #15
         [1,0,0,0,0,0,0,0,0,0] #16
         [1,0,0,0,0,0,0,0,0,0] #17
         [1,0,0,0,0,0,0,0,0,0] #18
         [1,0,0,0,0,0,0,0,0,0] #19
         [1,0,0,0,0,0,0,0,0,0] #20
         ...
         ]

然后重复列表的第二列(索引为 1的列)等于1然后我将不得不迭代开始和结束列表1次并填充输出数组,从行索引(start[1]==20)到列索引索引 1(即重复列表中重复值 1 的索引)处的行end[1]==30 ,值为 1。依此类推。

第二次迭代的输出数组将是这样的:

Output = [
         ...
         [1,0,0,0,0,0,0,0,0,0] #10
         [0,0,0,0,0,0,0,0,0,0] #11
         [0,0,0,0,0,0,0,0,0,0] #12
         [0,0,0,0,0,0,0,0,0,0] #13
         [0,0,0,0,0,0,0,0,0,0] #14
         [0,0,0,0,0,0,0,0,0,0] #15
         [0,0,0,0,0,0,0,0,0,0] #16
         [0,0,0,0,0,0,0,0,0,0] #17
         [0,0,0,0,0,0,0,0,0,0] #18
         [0,0,0,0,0,0,0,0,0,0] #19
         [0,1,0,0,0,0,0,0,0,0] #20
         [0,1,0,0,0,0,0,0,0,0] #21
         [0,1,0,0,0,0,0,0,0,0] #22
         [0,1,0,0,0,0,0,0,0,0] #23
         [0,1,0,0,0,0,0,0,0,0] #24
         [0,1,0,0,0,0,0,0,0,0] #25
         [0,1,0,0,0,0,0,0,0,0] #26
         [0,1,0,0,0,0,0,0,0,0] #27
         [0,1,0,0,0,0,0,0,0,0] #28
         [0,1,0,0,0,0,0,0,0,0] #29
         [0,1,0,0,0,0,0,0,0,0] #30
         ...
         ]

这是我尝试过的,但我很困惑:

Output=np.zeros((150, 10))

for i in range(len(start)):
    for j in range(10):
        ms = repetions[i][j]
        for p in range(ms):
            Output[start[i]:end[i], p]=1 

标签: pythonarrays

解决方案


没有 Numpy

repetitions= [2, 1, 1, 3, 1, 1, 1, 1, 2, 1]
start = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
end = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110]
x=10
imax=150
Output=[[0]*x]*imax
for i in range(len(start)):
    sample=[0]*x 
    sample[repetitions[i]]=1
    for p in range(end[i]-start[i]):
        Output[start[i]+p]=sample

也许你应该在范围内有end[i]-start[i]


推荐阅读