首页 > 解决方案 > 如何在不干扰顺序的情况下用另一个相同长度的数组对数组进行加权

问题描述

我是 python 新手,我需要用另一个相同长度的数组重新衡量一个数组,而不会干扰顺序,就像我想一个一个地衡量一个组件一样。

我正在尝试使用 NumPy

J1_wt = np.histogram(F2, bins = 30, weights = weigh_Clust)

但这肯定会改变顺序。

我的数据是这样的:

F1=[1.72288135,1.80961059,1.86767127,1.9610155,,2.02323446,2.07557286
,2.17004116,2.22494428,2.29753376,2.3668508,,2.42850874,2.51389674
,2.58029821,2.64361637,2.71345954,2.7655551,,2.82787335,2.8861585
,2.93373297,2.98516628,3.0189053,,3.05360633,3.08751637,3.09396867
,3.08311305,2.98948089,2.80641976,2.55476307,2.36904108,2.10458288]
weigh_Clust = [1.9980e-01,3.5495e-01,5.3415e-01,7.3330e-01,8.7739e-01,1.0000e+00
,8.6047e-01,7.2936e-01,6.0223e-01,5.8059e-01,4.5522e-01,3.3358e-01
,3.2457e-01,2.4599e-01,1.9208e-01,1.8167e-01,1.4581e-01,1.0866e-01
,1.0211e-01,9.1641e-02,5.9966e-02,5.7601e-02,3.7803e-02,2.3540e-02
,2.0282e-02,4.2473e-03,2.8461e-03,2.2244e-03,8.3204e-04,1.9426e-04]

也许简单的乘法就足够了,但我不确定。

有人可以帮我吗?

谢谢

标签: pythonpandasnumpy

解决方案


不幸的是,不清楚您所说的“用另一个数组重新衡量一个数组”是什么意思。但如果它是元素乘法,那么你可能会这样做

import numpy as np

F1 = np.array(F1)
wC = np.array(weigh_Clust)

F_W = F1*wC

如果您需要标量(=内部)产品,则:

np.dot(F1*wC)

加权平均值是:

np.dot(F1*wC)/np.sum(wC)

毕竟,这可能是您感兴趣的:

def plot():
    x = np.arange(F1.shape[0])
    with plt.style.context('fivethirtyeight'): 
        fig = plt.figure(figsize=(22,11)) 
        ax1 = fig.add_subplot(111)
        ax1.plot(x,F1,label='F1')
        ax1.plot(x,F1*wC,label='F1*wC')
        ax1.fill_between(x,F1, F1*wC, color='teal', alpha=0.2)
        plt.title('Weighted (F1*wC) against unweighted (F1)', fontweight='bold')
        plt.legend();plt.savefig('F1.png');plt.show()

plot()

在此处输入图像描述


推荐阅读