2 回答

TA贡献1873条经验 获得超9个赞
您可以使用专家库。在这种情况下,NumPy提供了矢量化解决方案。
对于较大的数字数据结构,列表列表方法效率低下,因为它将使用指针的集合。取而代之的是,NumPy利用连续的存储块来实现有效的数值转换。
import numpy as np
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)]]
# convert to NumPy arrays of shapes (10,) and (10, 2)
val = np.array(values).flatten()
pos = np.array(positions).reshape(-1, 2)
# initialize array of zeros
arr = np.zeros(pos.max(0)+1)
# assign values to positions
arr[[*pos.T]] = val
print(arr)
array([[ 5., 3., 0., 0., 0.],
[ 0., 0., 1., 1., 1.],
[ 0., 0., 0., 0., 7.],
[ 0., 0., 0., 8., 9.],
[ 4., 0., 0., 0., 10.]])
如果根据您的更新,您需要2个单独的阵列,则可以重复此过程:
# convert to NumPy arrays of shapes (10,) and (10, 2)
val1, val2 = (np.array(v).flatten() for v in values)
pos1, pos2 = (np.array(p).reshape(-1, 2) for p in positions)
# initialize array of zeros
arr1 = np.zeros(pos1.max(0)+1)
arr2 = np.zeros(pos2.max(0)+1)
# assign values to positions
arr1[[*pos1.T]] = val1
arr2[[*pos2.T]] = val2

TA贡献1801条经验 获得超16个赞
您可以这样做:
import itertools
import numpy as np
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 in range(len(positions[k])):
A[positions[k][i]] = values[k][i]
new_array_list += [A]
return new_array_list
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)]]
print list_to_array(5,5,positions,values)
添加回答
举报