假设我有这个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]
答案 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]