根据值创建具有数组索引的数组

时间:2019-04-01 10:03:35

标签: python arrays

我有一个像这样的2D数组:

map = [[0, 1, 1], [0, 2, 1], [0, 2, 2]]

我想基于值获取索引数组。对于example map[0][0] == 0,我希望该对(0,0)在结果数组的索引0上。结果数组应如下所示:

result[0] = [(0, 0), (1, 0), (2, 0)]
result[1] = [(0, 1), (0, 2), (1, 2)]
result[2] = [(1, 1), (2, 1), (2, 2)]

我一直在努力获得这样的结果而没有编写出非常糟糕的代码:

    val0 = []
    val1 = []
    val2 = []
    for i in range(3):
        for j in range(3):
            if(map[i][j] == 0) : val0.append((i, j))
            if(map[i][j] == 1) : val1.append((i, j))
            if(map[i][j] == 2) : val2.append((i, j))

    data = []
    data.append(val0)
    data.append(val1)
    data.append(val2)

2 个答案:

答案 0 :(得分:4)

遍历矩阵并保存在字典中可以看到每个值的位置。那是你的结果。

retval = defaultdict(list)
for i in range(len(map)):
   for j in range(len(map[i])):
      val = map[i][j]
      retval[val].append((i,j))
print retval

答案 1 :(得分:1)

您可以使用一些numpy方法:

import numpy as np
map = [[0, 1, 1], [0, 2, 1], [0, 2, 2]]
npmap = np.array(map)
[list(zip(*np.where(npmap==x))) for x in range(np.max(npmap)+1)]
#[[(0, 0), (1, 0), (2, 0)], [(0, 1), (0, 2), (1, 2)], [(1, 1), (2, 1), (2, 2)]]