我有两个列表,两个列表都称为位置和值。位置和值的每个子列表包含2D数组中在时间k = 1,..,n处的峰的位置和值。例如
values = [[5,1,1,8,10],[3,1,7,9,4]]
positions = [[(0,0),(1,2),(1,4),(3,3),(4,4)],[(0,1),(1,3),(2,4),(3,4),(4,0)]]
在此,列表[5,1,1,8,10]是2D数组上的值,[[0,0),(1,2),(1,4),(3,3),(4 ,, 4)]是这些值在时间0处的对应位置。同样,[3,1,7,9,4]是2D数组上的值,[[0,1),(1,3),(2,4),(3,4),(4,0 )]是这些值在时间1的对应位置。我想将这些值放在2D零数组上的对应位置。所以我做了以下功能
import itertools
def list_to_array(n_1, n_2, positions, values):
new_array_list = []
for k in range(len(positions)):
A = np.zeros((n_1,n_2))
for i, j in itertools.product(range(n_1), range(n_2)):
if (i,j) in positions[k]:
X = positions[k].index((i,j))
A[i,j] = values[k][X]
new_array_list += [A]
return new_array_list
这应该返回两个数组
A[0] = [[ 5. 0. 0. 0. 0.]
[ 0. 0. 1. 0. 1.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 8. 0.]
[ 0. 0. 0. 0. 10.]]
A[1] = [[ 0. 3. 0. 0. 0.]
[ 0. 0. 0. 1. 0.]
[ 0. 0. 0. 0. 7.]
[ 0. 0. 0. 0. 9.]
[ 4. 0. 0. 0. 0.]]
对于256x256的数组,单次迭代大约需要一秒钟,因此我需要对1600个列表执行迭代,这虽然很长,但仍然很合理。但是,我也希望对较大的数组(每个方向的长度最多8倍)执行此操作,因此很明显,上面的代码将花费太长的时间。我想知道是否有人知道更快的方法?
眼眸繁星
侃侃尔雅
相关分类