Python 用矩阵遍历字典

Python 用矩阵遍历字典,python,numpy,dictionary,for-loop,matrix,Python,Numpy,Dictionary,For Loop,Matrix,我有2个矩阵: x = np.matrix("1 2 3; 4 5 6") y = np.matrix("7 8 9; 10 11 12") …我把它们放在字典里了 d = {"a" : x, "b": y} 现在我想提取矩阵中位置相同的值,比如:1,7…2,8…3,9。。。依此类推,直到6,12(预期输出) 我只能手动完成,如下所示: [value[0,0] for value in d.values()] 我试图为此建立一个循环,但没有成功 有人能帮我一下吗?你可以这样做: va

我有2个矩阵:

x = np.matrix("1 2 3; 4 5 6")
y = np.matrix("7 8 9; 10 11 12")
…我把它们放在字典里了

d = {"a" : x, "b": y}
现在我想提取矩阵中位置相同的值,比如:1,7…2,8…3,9。。。依此类推,直到6,12(预期输出)

我只能手动完成,如下所示:

   [value[0,0] for value in d.values()]
我试图为此建立一个循环,但没有成功


有人能帮我一下吗?

你可以这样做:

values = zip(*d.values()) # gives [([1, 2, 3], [7, 8, 9]), ([4, 5, 6], [10, 11, 12])]
pairs = []
for value in values:
    pairs.extend(zip(*value)) #adds (1, 7), (2, 8), ... to pairs list

for pair in pairs:
    print(pair)
输出:

(1, 7)
(2, 8)
(3, 9)
(4, 10)
(5, 11)
(6, 12)

您可以执行以下操作:

values = zip(*d.values()) # gives [([1, 2, 3], [7, 8, 9]), ([4, 5, 6], [10, 11, 12])]
pairs = []
for value in values:
    pairs.extend(zip(*value)) #adds (1, 7), (2, 8), ... to pairs list

for pair in pairs:
    print(pair)
输出:

(1, 7)
(2, 8)
(3, 9)
(4, 10)
(5, 11)
(6, 12)

请注意,字典顺序无法保证,因此输出结果可能是
(7,1)(8,2)(9,3)(10,4)(11,5)(12,6)
@StevenRumbalski是的,那么我们可以简单地使用
values=zip(x,y)
而不是
values=zip(*d.values())
。这并不是更好,而是
pairs=zip(*[v.flat表示d.values()])
谢谢,但我没有得到相同的结果。可能是因为我使用的是python 3(?)。我试着这样写第一行:
values=list(zip(*d.values())
但是我得到了这样的结果:
[(矩阵([[1,2,3]])、矩阵([[7,8,9]])、(矩阵([[4,5,6]])、矩阵([[10,11,12]])
,这也是我运行整个代码时得到的结果。同时,我提出了另一种解决方案:
用于范围(0,2)中的x:y(0,3):打印([value[x,y]用于d.values()])
但我仍然对如何使用zip()函数感兴趣。@anplaceb哦,这是因为您使用的是numpy数组,而我使用的是Python列表。我的代码是Python3,因此没有兼容性问题。我喜欢你的解决方案。顺便说一下,您可以通过执行类似于
x\u list=numpy.array(x).重塑(-1,).tolist()
的操作来转换为常用列表。然后,您可以继续上面的代码。请注意,字典顺序没有保证,因此输出可能最终是
(7,1)(8,2)(9,3)(10,4)(11,5)(12,6)
@StevenRumbalski是的,那么我们可以简单地使用
值=zip(x,y)
而不是
值=zip(*d.values())
。这并不是更好,但是
pairs=zip(*[v.plant for v in d.values()]))
谢谢,但我没有得到相同的结果。可能是因为我使用的是python 3(?)。我试着这样写第一行:
values=list(zip(*d.values())
但是我得到了这样的结果:
[(矩阵([[1,2,3]])、矩阵([[7,8,9]])、(矩阵([[4,5,6]])、矩阵([[10,11,12]])
,这也是我运行整个代码时得到的结果。同时,我提出了另一种解决方案:
用于范围(0,2)中的x:y(0,3):打印([value[x,y]用于d.values()])
但我仍然对如何使用zip()函数感兴趣。@anplaceb哦,这是因为您使用的是numpy数组,而我使用的是Python列表。我的代码是Python3,因此没有兼容性问题。我喜欢你的解决方案。顺便说一下,您可以通过执行类似于
x\u list=numpy.array(x).重塑(-1,).tolist()
的操作来转换为常用列表。然后,您可以继续上面的代码。