2 回答

TA貢獻1873條經(jīng)驗 獲得超9個贊
您可以使用專家?guī)臁T谶@種情況下,NumPy提供了矢量化解決方案。
對于較大的數(shù)字?jǐn)?shù)據(jù)結(jié)構(gòu),列表列表方法效率低下,因為它將使用指針的集合。取而代之的是,NumPy利用連續(xù)的存儲塊來實現(xiàn)有效的數(shù)值轉(zhuǎn)換。
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.]])
如果根據(jù)您的更新,您需要2個單獨的陣列,則可以重復(fù)此過程:
# 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條經(jīng)驗 獲得超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)
添加回答
舉報