【发布时间】:2021-03-06 14:32:26
【问题描述】:
我有以下相关性:
a b c
a 1 0.9 0.8
b 0.9 1 0.7
c 0.8 0.7 1
以及以下向量:
col1 col2 col3
c1 a 5
c2 a -6
c1 b 10
c2 b -15
c1 c 24
c2 c -30
目的是将“col3”向量与每个“col2”的相关矩阵匹配元素相乘,同时请记住,当“col1”不同时要添加额外的权重 0.7:
蓝色 Corr(c1a,c1a): 25 = 5 * 5 * 1
绿色 Corr(c1a,c2a): -21 = 5 * -6 * 1 * .7
黄色校正(c1a,c1b): 45 = 5 * 10 * .9
red Corr(c1a,c2b): -47.25 = 5 * -15 * .9 * .7
'col1' 并不总是不同(在某些情况下它总是'c1',因此不需要额外的 0.7 权重,问题只是直接矩阵乘法)
有没有更pythonic的方式来表达上述内容?
我最初的想法是将相关矩阵扩展如下:
蓝色:1
绿色:0.7 = 1 * 0.7
黄色:0.9
红色:0.63 = 0.9 * 0.7
然后通过 einsum 或 tensordot 对向量进行上述操作。 (但我正在努力为其他矢量场景动态设置它) 也许有更好的方法来解决这个问题。 任何其他建议都会很棒!
设置:
import pandas as pd
corr = pd.DataFrame({'a':[1,.9,.8],
'b':[.9,1,.7],
'c':[.8,.7,1]},
index = ['a','b','c'])
inputs = pd.DataFrame({'col1':['c1','c2','c1','c2','c1','c2'],
'col2':['a','a','b','b','c','c'],
'col3':[5,-6,10,-15,24,-30]})
【问题讨论】:
标签: python pandas numpy correlation matrix-multiplication