我有一个numpy 2D矩阵,每个单元格可能包含一个整数值。 例如:
[[0, 1, 0, 2, 3],
[2, 0, 1, 1, 1]]
我想创建一个包含每个(x,y)单元格乘以其值的列表,例如,我想要在上面的矩阵的下面的列表:
[(1,0) , (3,0) , (3,0) , (4,0) , (4,0) , (4,0) , (0,1) , (0,1) , (2,1) , (3,1) , (4,1)]
换句话说,[0,1]
的值为1
,因此此x,y附加在列表“ 1”中。
我写这段代码。但是真的很慢如何使用优化的方法来做到这一点?
def page_to_std(data):
h, w = data.shape
res = []
for y in range(0, h):
for x in range(0, w):
amount = int(data[y][x])
for i in range(0, amount):
res.append((x,y))
return res
答案 0 :(得分:5)
似乎两个轴都在那里混合在一起。假设是这样,您可以使用np.ndindex
生成索引元组,并使用np.repeat
根据展平的输入数组重复生成的元组数组:
coo = np.fromiter(np.ndindex(a.shape), dtype='i,i')
np.repeat(coo, a.ravel()).tolist()
# [(0, 1), (0, 3), (0, 3), (0, 4), (0, 4), (0, 4), (1, 0), (1, 0), (1, 2), (1, 3), (1, 4)]