gpt4 book ai didi

python - 修改矩阵以包含各种数据特征

转载 作者:行者123 更新时间:2023-12-04 01:05:52 31 4
gpt4 key购买 nike

我有以下相关性:

    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:

enter image description here

蓝色 Corr(c1a,c1a):25 = 5 * 5 * 1

绿色 Corr(c1a,c2a):-21 = 5 * -6 * 1 * .7

黄色 Corr(c1a,c1b):45 = 5 * 10 * .9

红色 Corr(c1a,c2b):-47.25 = 5 * -15 * .9 * .7

'col1' 并不总是不同的(有些情况下它总是'c1',所以不需要额外的 0.7 权重,问题只是直接矩阵乘法)

是否有更 pythonic 的方式来表达上述内容?

我最初的想法是将相关矩阵展开如下:

enter image description here

蓝色: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]})

最佳答案

您可以尝试使用点积和条件乘法:

请注意,设置中的 corr 矩阵缺少索引标签,因此需要执行此额外步骤,如果 corr 矩阵是您在图像中显示的内容,则可以忽略此步骤.

corr1 = corr.set_axis(corr.columns,inplace=False)

解决方案:

u = inputs.set_index(['col1','col2'])
v = u.dot(u.T).mul(corr1,level=1)
cond = (v.index.get_level_values(0).to_numpy()[:,None]
!= v.columns.get_level_values(0).to_numpy()) #Credits wwii
#cond = (np.array(v.index.get_level_values(0))[:,None]
# != np.array(v.columns.get_level_values(0))[:,None].T)
out = v.mask(cond,v*0.7)

print(out)

col1 c1 c2 c1 c2 c1 c2
col2 a a b b c c
col1 col2
c1 a 25.00 -21.00 45.0 -47.25 96.00 -84.0
c2 a -21.00 36.00 -37.8 81.00 -80.64 144.0
c1 b 45.00 -37.80 100.0 -105.00 168.00 -147.0
c2 b -47.25 81.00 -105.0 225.00 -176.40 315.0
c1 c 96.00 -80.64 168.0 -176.40 576.00 -504.0
c2 c -84.00 144.00 -147.0 315.00 -504.00 900.0

关于python - 修改矩阵以包含各种数据特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66506780/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com