假设:
M = [[1, 2],
[3, 4]]
N = [[(0,1), (1, 0)],
[(1,1), (0,0)]]
使用M
和N
,维度2x2
。我如何获得元组的列表L
,其中每个元组是值的位置与M
和N
的值的组合:
L = [((0,0), (0,1), 1) ...]
L
上方的第一个条目,(0,0)
和M
中的位置N
以及{{1}中的元组/值(0,1)
来自N
的值1
。
我是否需要堆叠M
,M
来创建第三维? N
是否有一种干净有效的方法来生成这样的元组列表?
答案 0 :(得分:1)
使用它:
zip(*[iter(([((row,col),N[row][col],M[row][col]) for row in range(2) for col in range(2)]))]*2)
结果:
[(((0, 0), (0, 1), 1), ((0, 1), (1, 0), 2)),
(((1, 0), (1, 1), 3), ((1, 1), (0, 0), 4))]
答案 1 :(得分:0)
如果你需要将元组作为矩阵中的单元格,那么使用数组没有多大意义,但无论如何:
[zip(x,y) for x,y in zip(N,M)]
为了完整性'为了得到一个带坐标的平面列表:
indices = array(zip(*ndenumerate(M))[0]).reshape(2,2,2)
x = [res for row in [zip(map(tuple,i),x,y) for i,x,y in zip(indices,N,M)] for res in row]