Python将列表值从索引复制到另一个

时间:2019-11-14 10:44:13

标签: python numpy

假设我有这个numpy数组:

first_array = [[1. 0. 0. 0. 0.]
               [1. 0. 0. 0. 0.]
               [0. 1. 0. 0. 0.]
               [0. 0. 1. 0. 0.]
               [0. 0. 1. 0. 0.]
               [0. 0. 1. 0. 0.]
               [0. 0. 0. 0. 1.]]

我有这两个列表:

index_start = [50, 80, 110, 120, 150, 180, 200]
index_end= [70, 90, 115, 140, 170, 190, 220]

我想创建一个新的2D numpy output_array ,在其中按列 first_array 进行迭代,并将每行的每个值从 index_start 复制到 index_end

第一次迭代-例如, first_array [[1,1]] = 1,index_start [1] = 50 index_end [1] = 70 < / strong>,那么我的output_array的第一列的值将从索引 50 70

第二次迭代-然后 first_array [[2,1]] = 1,index_start [2] = 80 index_end [2] = 90 ,那么我的output_array的 first 列也将具有值1,但从索引 80 90

第三次迭代- first_array [[2,3]] = 1,index_start [3] = 110 index_end [3] = 115 >然后我的output_array的 second 列的值将为1,从索引 110 115 ,依此类推。

这是我尝试过的方法,但这给了我错误的结果:

first_array = [[1, 0, 0, 0, 0,],
               [1, 0, 0, 0, 0,],
               [0, 1, 0, 0, 0,],
               [0, 0, 1, 0, 0,],
               [0, 0, 1, 0, 0,],
               [0, 0, 1, 0, 0,],
               [0, 0, 0, 0, 1,]]
index_start = [50, 80, 110, 120, 150, 180, 200]
index_end= [70, 90, 115, 140, 170, 190, 220]
last_index = max(index_start+index_end)
output_array = np.zeros((last_index, 5))

for i in range(len(index_start)):
    for j in range(last_index):
        for k in range(5):
            output_array[index_start[i]:index_end[i]]=first_array[i][k]

1 个答案:

答案 0 :(得分:2)

现在正在工作。我忘了在output_array处添加k列索引。如果有人需要,这是最终的工作代码。

first_array = [[1, 0, 0, 0, 0,],
               [1, 0, 0, 0, 0,],
               [0, 1, 0, 0, 0,],
               [0, 0, 1, 0, 0,],
               [0, 0, 1, 0, 0,],
               [0, 0, 1, 0, 0,],
               [0, 0, 0, 0, 1,]]
index_start = [50, 80, 110, 120, 150, 180, 200]
index_end= [70, 90, 115, 140, 170, 190, 220]
last_index = max(index_start+index_end)
output_array = np.zeros((last_index+1, 5))

for i in range(len(index_start)):
    for k in range(5):
        output_array[index_start[i]:index_end[i]+1, k]=first_array[i][k]