Kai*_*nen 2 python math linear-algebra
我使用Python学习线性代数,我有两个词典:
v = {1: 1, 2: 8, 3: 0}
Run Code Online (Sandbox Code Playgroud)
和
M = {(1, 2): 2, (3, 1): 1, (3, 3): 7, (2, 1): -1}
Run Code Online (Sandbox Code Playgroud)
我想创建一个字典,添加所有元素,其中v中的键与M中元组的第一部分相同.这里我想要作为两个字典的答案.(我将展示我想要做的计算)
newDict = {1: 1*M[(1, 2)], 2: 8*M[(2, 1)], 3: 0*M[(3, 1)]+0*M[(3, 3)]
Run Code Online (Sandbox Code Playgroud)
这与:
newDict = {1: 1*2, 2: 8*-1, 3: 0*1+3*7}
Run Code Online (Sandbox Code Playgroud)
所以我在表格中得到了一本最后的字典
newDict = {1:2, 2:-8, 3:0}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我想要与字典v中相同的键.我得到的最接近的是:
>>> [v[k]*M[r] for k in v for r in M if k == r[0]]
[2, -8]
Run Code Online (Sandbox Code Playgroud)
我至少有正确的答案,但我不能让它工作.我不知道从这里去哪里或者我是否在正确的轨道上.对不起,如果我的解释可能不足
因为您基于多个输入键的值,所以使用循环而不是理解.使用collections.defaultdict
对象也使逻辑更简单:
from collections import defaultdict
newDict = defaultdict(int)
for x, y in M:
newDict[x] += M[x, y] * v.get(x, 0)
Run Code Online (Sandbox Code Playgroud)
输出:
>>> from collections import defaultdict
>>> v = {1: 1, 2: 8, 3: 0}
>>> M = {(1, 2): 2, (3, 1): 1, (3, 3): 7, (2, 1): -1}
>>> newDict = defaultdict(int)
>>> for x, y in M:
... newDict[x] += M[x, y] * v.get(x, 0)
...
>>> newDict
defaultdict(<type 'int'>, {1: 2, 2: -8, 3: 0})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1993 次 |
最近记录: |